使用 form_kwargs 在 Django 1.9 中已经修复了这个问题。
我有一个长得像这样的 Django 表单:
class ServiceForm(forms.Form):
option = forms.ModelChoiceField(queryset=ServiceOption.objects.none())
rate = forms.DecimalField(widget=custom_widgets.SmallField())
units = forms.IntegerField(min_value=1, widget=custom_widgets.SmallField())
def __init__(self, *args, **kwargs):
affiliate = kwargs.pop('affiliate')
super(ServiceForm, self).__init__(*args, **kwargs)
self.fields["option"].queryset = ServiceOption.objects.filter(affiliate=affiliate)
我用类似这样的代码调用了这个表单:
form = ServiceForm(affiliate=request.affiliate)
当request.affiliate
是已登录用户时,它按预期运行。
我的问题是我现在想将这个单一表单转化为一个表单集。我无法弄清楚的是,在创建表单集时如何将联盟信息传递给各个表单。根据文档,要从这个表单创建一个表单集,我需要像这样做:
ServiceFormSet = forms.formsets.formset_factory(ServiceForm, extra=3)
然后我需要像这样创建它:
formset = ServiceFormSet()
现在我该如何以这种方式将 affiliate=request.affiliate 传递给各个表单?