【发布时间】:2010-11-23 03:23:18
【问题描述】:
我正在使用这样的东西:
field1 = forms.ModelChoiceField(queryset=...)
如何让我的表单显示选定的 a 值?
【问题讨论】:
标签: django django-forms
我正在使用这样的东西:
field1 = forms.ModelChoiceField(queryset=...)
如何让我的表单显示选定的 a 值?
【问题讨论】:
标签: django django-forms
如果你想设置默认初始值,你应该定义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__,因此它可以正确显示。
【讨论】:
__init__() got an unexpected keyword argument field1
你可以使用
field1 = forms.ModelChoiceField(queryset=..., initial=0)
选择第一个值等。这是更通用的方式,然后是另一个答案。
【讨论】:
django>=1.8。我相信这应该适用于所有版本,包括>=1.4
ModelChoiceField.__init__(..., initial,...) 的参数。
他们改变的时代:
现在可以像其他表单字段一样通过定义initial 来设置默认初始值除了您将其设置为id。
现在这就足够了:
form = YourForm(initial = {'field1': instance_of_mymodel })
虽然两者仍然有效。
【讨论】:
你也可以这样做:
form = YourForm(initial = {'field1': pk })
如果您通过查询字符串或通过 ajax 调用解析主键,则不需要实例,查询集已经为您的下拉列表处理了该问题,pk 索引您想要的状态
【讨论】:
代码
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
和
form = YourForm(initial = {'field1': instance_of_mymodel })
或直接跟随的初始字段:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
所有工作。
前两种方式将覆盖最后一种方式。
【讨论】:
field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")
就这么简单......!
【讨论】: