【发布时间】:2012-03-09 03:46:18
【问题描述】:
我似乎无法弄清楚如何在 Django 中正确处理以下情况:
我在模型中有一个日期范围,我将其存储为两个单独的字段,date_start 和 date_end:
start_date = models.DateTimeField()
end_date = models.DateTimeField()
在此模型的表单中,我想将其表示为一个字段,带有一个标签:
timespan = forms.Field(widget=widgets.SelectDateRangeWidget(), label="Date Range")
现在,我扩展了 MultiWidget 以创建 SelectDateRangeWidget:
class SelectDateRangeWidget(forms.MultiWidget):
...
然后包含两个Date 小部件。我想使用它,但随后将其清理为两个单独的模型字段,并保留将初始数据加载到表单字段中的能力。是每次手动将initial设置为这两个字段的值的唯一方法,可能在表单的__init__函数中,并且还手动将其清理到这两个模型字段中,或者是否有清洁器(以便说话)怎么做?
【问题讨论】:
-
我不明白问题出在哪里:提取您的两个日期,并将它们存储在模型中。
-
@marcin:我如何以一种有意义的方式将
initial值设置为两个模型字段的值,并且不会破坏 init 函数表格?我只是错过了一些明显的东西吗? -
给每个字段设置
initial参数有什么问题? -
@Marcin:这不是一个令人满意的解决方案,因为它将表单逻辑的关键部分放入视图中。或者,可以覆盖表单
__init__函数来做到这一点,但仍然不是最好的。我认为可能有一个更清洁的解决方案,但我想答案是使用丑陋的解决方案并继续前进。 -
它以什么方式将表单逻辑放入视图中?你在使用模型吗?如果没有,并且您有充分的理由不这样做,请将您的表单转换为模型表单,并引用目标模型对象。
标签: django django-forms django-multiwidget