为了账号安全,请及时绑定邮箱和手机立即绑定

Django将自定义表单参数传递给Formset

Django将自定义表单参数传递给Formset

慕运维8079593 2019-08-06 14:42:56
Django将自定义表单参数传递给Formset这是使用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登录用户在哪里。这按预期工作。我的问题是我现在想把这个单一的表单变成一个formset。我无法弄清楚的是,在创建formset时,我如何将联盟信息传递给各个表单。根据文档制作一个formset,我需要做这样的事情:ServiceFormSet = forms.formsets.formset_factory(ServiceForm, extra=3)然后我需要像这样创建它:formset = ServiceFormSet()现在,我如何通过这种方式将affiliate = request.affiliate传递给单个表单?
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我会使用functools.partialfunctools.wraps

from functools import partial, wrapsfrom django.forms.formsets import formset_factoryServiceFormSet = formset_factory(wraps(ServiceForm)(partial(ServiceForm, affiliate=request.affiliate)), extra=3)

我认为这是最干净的方法,并且不会以任何方式影响ServiceForm(即难以进行子类化)。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 1004 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信