DjangoのGeneric ViewでWidgetを変更する

このところDjangoを触っていました。

ひとしきりチュートリアルやって慣れると、Generic Viewが便利なこともあっておおむねさくさく進むのですが、しょーもないところでハマって抜けなくなった。

ハマると日本語の情報がなさすぎて、非常に辛かったのでメモ。

やりたかったこと

DjangoのGeneric Viewでdjango-datetime-widgetを使いたい。それだけ。

forms.pyでwidgetを変更して、viewを頑張って書くケースは、Stack Overflowで調べててもわりと出てくる。

asaglimbeni/django-datetime-widget · GitHub

Django-Datetime-widgetを使ってみた - くろねこ日記

Generic Viewだと、forms.pyは使わなくてもいいので、いまいち要領がわからない。

でも真面目にview書くのめんどくさいから、Genericでなんとかしたい。

解決方法

forms.pyはドキュメント通りに用意、Genericのform_class変数で、作ったModelFromを指定する。

forms.pyはこんな感じ

from datetimewidget.widgets import DateWidget

class SpamForm(ModelForm):
    class Meta:
        model = Spam
        dateOptions = {
            'format': 'yyyy-MM-dd',
            'autoclose': True,
            'showMeridian': True,
        }
        widgets = {
        'spam_date': DateWidget(options=dateOptions),
        }

Viewはこんな感じ。

from django.views import generic
from manage_sales.forms import SpamForm

class SpamCreateView(generic.CreateView):
    form_class = Spam
    model      = Spam

これでGenericViewでWidgetを好き勝手いじれる。