我正在使用这样的东西:
field1 = forms.ModelChoiceField(queryset=...)
如何让表单显示所选的值?
答案 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索引您想要的状态