我们可以在django表单中为ModelChoiceField提供动态查询集吗?

时间:2014-03-23 09:43:30

标签: python django django-models django-forms

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

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

我创建了一个表单:

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

但是我想根据url对字段做一些限制,这意味着它不是常量数据,我应该怎么做才能更改testForm的field1的查询集?

1 个答案:

答案 0 :(得分:4)

您可以覆盖该字段。 使用

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)