所以我的 django 书又回到了大学,我正在努力解决这个问题。
我已经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 不知道如何获取我的 multi-widget 并将其转换回基础字段类型,该字段类型设置models.py
为DateField()
,显然。
现在,django 源代码中围绕 MultiWidget 的注释给了我这个有用的提示:
您可能希望将此类与 MultiValueField 一起使用。
但问题是——我可能不会。我想保留我的DateField()
,因为它非常有用,而且没有必要复制它。然后我需要做的是以某种方式将这些多个字段转换回单个有效的日期字符串 ( yyyy-mm-dd
) 以插入到数据库中。
我的问题是:
如何?实现这一目标的最佳方法是什么?