【问题标题】:Create empty queryset by default in django form fields在 django 表单字段中默认创建空查询集
【发布时间】:2012-06-29 21:49:19
【问题描述】:

我在表单中有这个字段:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())

区来自点击城市,区域来自点击区域。使用queryset=MyDistrict.objects.all()queryset=MyArea.objects.all() 表单会很重。如何让查询集默认为空?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    @radtek 的 comment 应该是一个答案,因为它在类似情况下很有用,但方法与接受的答案不同。

    如果您的查询集随着您视图中的 url 而变化。

    我用我使用的例子来扩展答案:

    def my_view(request):
        ...
        form = YourForm(initial={'field1':value1, 'field2':value2})
        form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
    

    【讨论】:

      【解决方案2】:

      您可以通过这样做获得一个空的查询集:

      MyModel.objects.none()
      

      虽然我不知道您将如何使用该表单,但您可以将其作为您的字段的查询集以获得您需要的内容...

      您可以找到更多信息here

      【讨论】:

      • 在查询集根据 url 参数在视图中更改的用例中。然后在您看来,您可以像这样设置正确的查询集:edit_form.fields["asset"].queryset = Asset.objects.filter(location_id=location_id)
      • 如果我没有模型怎么办,我只是在做一个values_list('something', flat=True)
      猜你喜欢
      • 2015-05-01
      • 2019-04-21
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多