我有一ModelForm
堂课,其中我将几个字段设置为ChoiceField
. 对于我的一个观点,我想从我的ModelForm
类中创建一个表单,该表单从数据库中的模型实例中提取(就像这样):
form = MyModel(instance=model_instance)
当我这样做然后在模板中呈现表单时,我注意到大多数字段都预先填充了从模型实例中提取的值,这正是我想要的。但是,这不是两个ChoiceField
字段的情况。这些呈现为没有选择特定选项的下拉选择菜单。
奇怪的是,如果我没有ChoiceField
在我的 ModelForm 类中将这两个字段定义为 -type,它们会呈现为 HTML 中的普通文本输入字段并使用数据库值进行预填充。但是当我定义它们以使它们在 HTML 中显示为选择选项输入字段时,没有预先选择任何内容。我可以更改它以便预先选择数据库中的值吗?
编辑:这里要求的是我的模型和表单的代码:
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
模型定义中的参数是否会有所不同?
更新:我刚刚注意到,如果我像这样拉起一个App
实例python manage.py shell
:
a = App.objects.get(id=16)
a.start_time
我得到一个像datetime.time(12, 0)
. 但是在 Django 管理员中,当我查看所有App
实例时,它们都显示(None)
在start_time
和下end_time
。为什么会这样?