【发布时间】:2012-08-15 21:38:45
【问题描述】:
根据这个 SO 问题Django Passing Custom Form Parameters to Formset 我尝试使用 curry 将初始值字典传递给我的表单集。
它不起作用,它给了我一组空值,这不是它应该做的。
谁能看看我执行这个错误吗?
data = {'supplier': input_data['supplier'],}
InstanceFormSet = formset_factory(BulkAddInstanceForm, extra=int(input_data['copies']))
InstanceFormSet.form = staticmethod(curry(BulkAddInstanceForm, data))
编辑:根据要求
class BulkAddInstanceForm(forms.Form):
def __init__(self, *args, **kwargs):
super(BulkAddInstanceForm, self).__init__(*args, **kwargs)
self.fields['supplier'] = forms.ModelChoiceField(
queryset=Supplier.objects.all(),
label='Supplier',
empty_label='Select a Supplier...',
required=True,
)
self.fields['syllabus'] = forms.ModelChoiceField(
queryset=Syllabus.objects.all(),
label='Syllabus',
empty_label='Select a Syllabus...',
widget=FilterWidget(
queryset=Syllabus.objects.all(),
parent_queryset=Supplier.objects.all(),
control_name='supplier',
parent_attr='supplier',
),
required=False,
)
self.fields['venue'] = forms.ModelChoiceField(
queryset=Venue.objects.all(),
label='Venue',
empty_label='Select a Venue...',
widget=FilterWidget(
queryset=Venue.objects.all(),
parent_queryset=Supplier.objects.all(),
control_name='supplier',
parent_attr='supplier',
),
required=False,
)
start_date = NiceDateField(required=False, label='Start Date')
residential = forms.BooleanField(label='Res?', required=False)
special_offers = forms.BooleanField(label='S/O?', required=False)
manual_price = forms.IntegerField(required=False)
manual_cost = forms.IntegerField(required=False)
edit2:粮农组织布兰登
我看过 docco,它建议做不同的事情。
formset = formset_factory(BulkAddInstanceForm, extra=int(input_data['copies']))
formset = InstanceFormSet(initial=[data, ])
它创建了一个包含“副本”数量的表单的表单集,以及另一个包含数据的表单集。 如果我这样做
formset = InstanceFormSet(initial=[data, data])
然后我得到两个额外的表格,其中包含数据。 所以我的想法是我需要一个迭代器来添加“副本”数量的字典并将表单集中的初始表单数量归零。
我还不知道怎么编码!!
【问题讨论】:
-
我们可以看看你的 BulkAddInstanceForm 吗?