【问题标题】:Can we give dynamic queryset for ModelChoiceField in django forms?我们可以在 django 表单中为 ModelChoiceField 提供动态查询集吗?
【发布时间】:2014-03-23 09:43:30
【问题描述】:

我想创建一个模型表单,它在模型中有一个外键。喜欢:

class TestModel(Model):
    field1=ForeignKey(RefModel)

我创建了一个类似的表单:

class TestForm(ModelForm):
    class Meta(object):
        model = TestModel
        widgets = {'field1': RadioSelect}

但是我想根据url对字段做一些限制,也就是说它不是常量数据,我应该怎么做才能改变TestForm的field1的查询集?

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    您可以覆盖该字段。 使用

    field1 = ModelChoiceField(queryset=<<your_queryset_here>>, widget=RadioSelect)
    

    您还可以在 __init__ 方法中覆盖此查询集并相应地调整字段:

    class TestForm(ModelForm):
        field1 = ModelChoiceField(queryset=<<your_queryset_here>>, widget=RadioSelect)
    
        class Meta(object):
            model = TestModel
    
        def __init__(self, **kwargs):
            super(TestForm, self).__init__(**kwargs)
            self.fields['field1'].queryset = kwargs.pop('field1_qs')
    

    并在管理它的视图中相应地启动表单。

    my_form = TestForm(field1_qs=MyQS)
    

    【讨论】:

    • 这真的很有帮助,第二种方法是我渴望的。我知道第一种方法并尝试修改testform_instance.field1.queryset,但它说没有这样的属性,这是一个奇怪的问题,因为我们已经定义了field1的这样一个属性。我也尝试在init中定义一个field1,它也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2011-07-13
    • 2011-08-17
    相关资源
    最近更新 更多