我有一个ModelForm
我在其中设置了几个字段的类ChoiceField
。对于我的一个观点,我想从我的ModelForm
从数据库中模型实例中提取的类(如下所示):
form = MyModel(instance=model_instance)
当我执行此操作然后在模板中渲染表单时,我注意到大多数字段都预先填充了从模型实例中提取的值,这正是我想要的。然而,对于两个人来说情况并非如此ChoiceField
字段。这些呈现为下拉选择菜单,未选择任何特定选项。
奇怪的是,如果我不将这两个字段定义为ChoiceField
- 在我的 ModelForm 类中键入,它们呈现为 HTML 中的普通文本输入字段,并使用数据库值进行预填充。但是,当我定义它们以便它们显示为 HTML 中的选择选项输入字段时,没有预先选择任何内容。我可以更改此设置以便预先选择数据库中的值吗?
EDIT:根据此处的要求,我的模型和表单的代码:
class App(models.Model):
CODES = (
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
code = models.CharField(max_length=1, choices=CODES)
start_time = models.TimeField(blank=True, null=True)
end_time = models.TimeField(blank=True, null=True)
class AppForm(ModelForm):
CODES = (
(u'',u'Please select code'),
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
TIMES = (
(u'00:00',u'All Day'),
(u'12:00',u'Noon')
)
start_time = forms.ChoiceField(required=False, choices=TIMES)
end_time = forms.ChoiceField(required=False, choices=TIMES)
code = forms.ChoiceField(choices=CODES, label='Type')
class Meta:
model = App
有趣的是,code
当呈现为 HTML 时,字段具有预先选择的模型实例值。我想知道是否有choices
模型定义中的参数在这里有什么不同吗?
UPDATE:我刚刚注意到,如果我拉起一个App
实例中的python manage.py shell
像这样:
a = App.objects.get(id=16)
a.start_time
我得到一个像这样的值datetime.time(12, 0)
。但是在 Django 管理中,当我查看所有的App
实例,所有这些都表明(None)
under start_time
and end_time
。为什么会这样呢?