Django ModelForm ChoiceField不显示实例数据

时间:2013-04-17 09:10:32

标签: django django-forms

我有一个ModelForm课程,我在其中设置了几个字段ChoiceField。对于我的一个观点,我想从我的ModelForm类创建一个表单,该表单来自数据库中的模型实例(如此):

form = MyModel(instance=model_instance)

当我这样做然后在模板中渲染表单时,我注意到大多数字段都预先填充了从模型实例中提取的值,这正是我想要的。但是,两个ChoiceField字段不是这种情况。这些呈现为下拉选择菜单,未选择任何特定选项。

奇怪的是,如果我没有将这两个字段定义为ChoiceField - 在我的ModelForm类中输入,它们将呈现为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。为什么会这样?

1 个答案:

答案 0 :(得分:1)

响应您的更新:您的时间字符串匹配默认时间字符串HH:MM格式。就像用户手动从网站上输入它们一样。这些值在模型保存时解析并转换为时间(真正验证时)。

当你加载模型时 - 当然从对象加载的初始值匹配字段的(models.TimeField)类型。

如果用

替换你的TIMES
    (datetime.time(0,0),u'All Day'),
    (datetime.time(12,0),u'Noon')

你的烦恼应该结束了。

艾伦