根据这个问题Django Passing Custom Form Parameters to Formset我尝试使用curry将初始值的字典传递给我的formset。
它不起作用,它给了我一个空值的形式,这不是它应该做的。
任何人都可以看到我是否实现了这个错误?
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:FAO Brandon
我看过docco并建议做另外一件事。
formset = formset_factory(BulkAddInstanceForm, extra=int(input_data['copies']))
formset = InstanceFormSet(initial=[data, ])
创建一个包含'副本'数量的表单的表单集,以及另一个包含数据的表单集。 如果我这样做
formset = InstanceFormSet(initial=[data, data])
然后我得到两个额外的数据表格。 所以我的想法是我需要一个迭代器来添加'副本'的字典数量,并将表单集中的初始表单数量归零。
不是我知道如何鳕鱼!!
答案 0 :(得分:1)
设法使用以下代码执行此操作:
InstanceFormSet = formset_factory(BulkAddInstanceForm, extra=0)
# build the list for populating the forms
n, datalist = 0, []
while n < int(input_data['copies']):
datalist.append(data)
print datalist
n +=1
formset = InstanceFormSet(initial=datalist)
所以我创建了formset,然后我创建了一个数据字典列表,然后用inital数据作为列表填充formset。
到目前为止,似乎工作正常,但我必须弄清楚如何收集和提交信息。
答案 1 :(得分:0)
您需要在__init__
当我过去使用过这个时,我已经设置了这样的参数:
class MyForm(forms.Form):
def __init__(self, data, *args, **kwargs):
self.data = data
#do whatever else I need to do with data
super(MyForm, self).__init__(*args, **kwargs)
希望能帮到你。