在forms.Form的__init__中更改ModelChoiceField的查询集

时间:2014-12-15 09:28:09

标签: python django forms

我目前无法覆盖__init__()的{​​{1}}。

基本表格

forms.Form

儿童表格

class ReportsMainForm(forms.Form):
 ---- #Some fields
    def __init__(self, *args, **kwargs):
        super(ReportsMainForm, self).__init__(*args, **kwargs)

问题

问题在于,我的class Child(ReportsMainForm): customer = forms.ModelChoiceField( queryset=Customer.objects.none(), label="Customer", empty_label=None, required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) super(Child, self).__init__(*args, **kwargs) self.fields['customer'].queryset = Customer.objects.filter(user=self.request.user) 尚未更新。我错过了什么?

2 个答案:

答案 0 :(得分:3)

尝试更改小部件的查询集(ehm ...选项):

self.fields['customer'].queryset = ...
self.fields['customer'].widget.choices = self.fields['customer'].choices

<强> WHY吗

检查代码(请参阅django.forms.model.ModelChoiceField),当在字段小部件上设置查询集时,也会更新(这很好):

但是选择会缓存在字段上,因此它们总是相同的......

我认为这是一个错误,因为有明确的选项&#34; cache_choices&#34;在字段init上,默认为False。

答案 1 :(得分:0)

此行错误

super(ProjectsBySalesman, self).__init__(*args, **kwargs)

应该是

super(Child, self).__init__(*args, **kwargs)