Django,ModelChoiceField()和初始值

我正在使用这样的东西:

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

我怎样才能让我的表单显示一个选定的值?

如果你想设置默认的初始值,你应该像其他表单字段一样定义初始值,除非你将其设置为id 。

假设你有这样的field1

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

那么当你像这样创build你的表单时,你需要设置初始值:

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

而不是:

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

我也假设你已经为你的模型定义了__unicode__ ,所以这个显示正确。

你可以使用

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

使第一个值被选中等等。这是更一般的方法,然后是另一个答案。

他们改变的时代:

现在可以通过像其他表单字段一样定义初始值来设置默认初始值 除非您将其设置为id

现在这就足够了:

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

虽然两个仍然工作。

代码

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

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

或者直接在下面的初始字段

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

所有的工作。

前两种方法将覆盖最后的方式。

你也可以这样做:

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

如果通过查询string或通过ajax调用parsing主键,则不需要实例,查询集已经处理了您的下拉列表,pk索引您想要的状态