我们可以为Django表单中的ModelChoiceField提供动态查询集吗?
我想创建一个模型表单,这个模型里有一个外键。就像这样:
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)