【发布时间】:2013-04-09 23:30:37
【问题描述】:
我有一个ModelForm 类,在其中我将几个字段设置为ChoiceField。对于我的一个观点,我想从我的 ModelForm 类中创建一个表单,该表单从数据库中我的模型实例中提取(就像这样):
form = MyModel(instance=model_instance)
当我这样做然后在模板中呈现表单时,我注意到大多数字段都预先填充了从模型实例中提取的值,这正是我想要的。但是,这不是两个 ChoiceField 字段的情况。这些呈现为没有选择特定选项的下拉选择菜单。
奇怪的是,如果我没有在我的 ModelForm 类中将这两个字段定义为 ChoiceField-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 参数是否会有所不同?
更新:我刚刚注意到,如果我在 python manage.py shell 中拉出一个 App 实例,如下所示:
a = App.objects.get(id=16)
a.start_time
我得到一个像datetime.time(12, 0) 这样的值。但是在 Django 管理员中,当我查看所有App 实例时,它们都在start_time 和end_time 下显示(None)。为什么会这样?
【问题讨论】:
-
您能否将代码发布到您的模型和表单中。谢谢。
-
@Hedde,不希望有默认选择选项。我希望所选选项来自对象实例。您会注意到我实际上在另一个问题的已接受答案下方发表了评论,正是因为它对我不起作用。
-
定义一个动态初始值覆盖表单的init方法,通过给定的实例值设置默认值
-
@Hedde,谢谢你的建议。我编辑了我的问题以包含我的模型和表单的代码,现在我想知道为什么实例值显示在我的表单的
code字段中而不是其他两个字段中。
标签: django django-forms