Django,ModelChoiceField()和初始值

时间:2009-08-26 19:18:34

标签: django django-forms

我正在使用这样的东西:

field1 = forms.ModelChoiceField(queryset=...)

如何让表单显示所选的值?

6 个答案:

答案 0 :(得分:83)

如果您想设置默认初始值,则应该像initial之外的其他表单字段一样定义set it to the id instead

说你有field1这样:

class YourForm(forms.Form):
    field1 = forms.ModelChoiceField(queryset = MyModel.objects.all() )

然后你需要在创建表单时设置初始值:

form = YourForm(initial = {'field1': instance_of_mymodel.pk })

而不是:

form = YourForm(initial = {'field1': instance_of_mymodel })

我还假设您为模型定义了__unicode__,因此可以正确显示。

答案 1 :(得分:22)

你可以使用

 field1 = forms.ModelChoiceField(queryset=..., initial=0) 

选择第一个值等。这是更通用的方式,然后是另一个答案。

答案 2 :(得分:9)

他们改变的时间:

现在可以通过定义initial和其他表单字段来设置默认初始值,除非您将其设置为id而不是

现在这就足够了:

form = YourForm(initial = {'field1': instance_of_mymodel })

虽然两者仍有效。

答案 3 :(得分:3)

代码

form = YourForm(initial = {'field1': instance_of_mymodel.pk })

form = YourForm(initial = {'field1': instance_of_mymodel })

或直接跟随的初始字段:

field1 = forms.ModelChoiceField(queryset=..., initial=0) 

所有工作。

前两种方式将覆盖最终方式。

答案 4 :(得分:0)

field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")

就这么简单...!

答案 5 :(得分:-2)

你也可以这样做:

form = YourForm(initial = {'field1': pk })

如果您通过查询字符串或通过ajax调用解析主键而不需要实例,则查询集已经处理了您的下拉,pk索引您想要的状态