1

我有一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。为什么会这样?

4

1 回答 1

1

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

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

如果您将 TIMES 替换为

    (datetime.time(0,0),u'All Day'),
    (datetime.time(12,0),u'Noon')

你的麻烦应该已经结束了。

艾伦

于 2013-04-18T10:00:23.860 回答