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

2 投票
1 回答
3697 浏览
提问于 2025-04-17 23:30

我想创建一个模型表单,这个模型里有一个外键。就像这样:

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

我创建了一个表单,像这样:

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

但是我想根据网址对某个字段进行一些限制,这意味着这个数据不是固定的。我该怎么做才能改变TestForm中field1的查询集呢?

1 个回答

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)

撰写回答