【问题标题】:Django, ModelChoiceField() and initial valueDjango,ModelChoiceField() 和初始值
【发布时间】:2010-11-23 03:23:18
【问题描述】:

我正在使用这样的东西:

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

如何让我的表单显示选定的 a 值?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    如果你想设置默认初始值,你应该定义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__,因此它可以正确显示。

    【讨论】:

    • 在撰写本文时不知道版本是什么,但这个问题现在有点过时了。在撰写本文时,在 Django 1.5 中,这两种方法都可以使用。
    • 知道为什么我会收到__init__() got an unexpected keyword argument field1
    【解决方案2】:

    你可以使用

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

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

    【讨论】:

    • 这适用于哪个版本的 Django?在 1.8 版中它似乎对我不起作用。
    • 我已经从source code 验证并自己测试它是否适用于django>=1.8。我相信这应该适用于所有版本,包括>=1.4
    • @Raffi 是的,link in my comment above 指向 Django=1.8.11 的 ModelChoiceField.__init__(..., initial,...) 的参数。
    【解决方案3】:

    他们改变的时代:

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

    现在这就足够了:

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

    虽然两者仍然有效。

    【讨论】:

    • 请说明您正在运行的 Django 版本,因为“时代已经改变”。更改了一些可能会升级到 1.2...
    【解决方案4】:

    你也可以这样做:

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

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

    【讨论】:

      【解决方案5】:

      代码

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

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

      或直接跟随的初始字段:

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

      所有工作。

      前两种方式将覆盖最后一种方式。

      【讨论】:

        【解决方案6】:
        field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")
        

        就这么简单......!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-22
          • 1970-01-01
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多