私のジャンゴの本は大学に戻ってきたので、これを解決するのに苦労しています。
私はdjango.forms.widgets.MultiWidget
次のようにサブクラス化しました:
class DateSelectorWidget(widgets.MultiWidget):
def __init__(self, attrs=None, dt=None, mode=0):
if dt is not None:
self.datepos = dt
else:
self.datepos = date.today()
# bits of python to create days, months, years
# example below, the rest snipped for neatness.
years = [(year, year) for year in year_digits]
_widgets = (
widgets.Select(attrs=attrs, choices=days),
widgets.Select(attrs=attrs, choices=months),
widgets.Select(attrs=attrs, choices=years),
)
super(DateSelectorWidget, self).__init__(_widgets, attrs)
def decompress(self, value):
if value:
return [value.day, value.month, value.year]
return [None, None, None]
def format_output(self, rendered_widgets):
return u''.join(rendered_widgets)
これにより、次のような気の利いた日付選択フィールドが表示されます。
私の質問は本当にとても簡単です。上記のフォームをその処理方法に送信すると(次のようなプロセスを使用します:
forminstance = ModelNameForm(request.POST, instance=modelinstance)
if forminstance.is_valid():
forminstance.save()
これは失敗します。Django は、私のマルチウィジェットを取得して、それを に設定されている基礎となるフィールド タイプに変換する方法を認識していないためmodels.py
ですDateField()
。
ここで、django ソースの MultiWidget に関するコメントから、次の役立つヒントが得られます。
おそらく、このクラスを MultiValueField と一緒に使用したいと思うでしょう。
しかし、問題は - 私はおそらくそうではありません。DateField()
とても便利で、複製しても意味がないので、手元に置いておきたいと思います。yyyy-mm-dd
次に、データベースに挿入するために、これらの複数のフィールドを単一の有効な日付文字列 ( ) に変換する必要があります。
私の質問は次のとおりです。
どのように?これを達成するための最良の方法は何ですか?