この SO の質問Django Passing Custom Form Parameters to 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 ブランドン
私はdoccoを見ましたが、別のことをすることを提案しています。
formset = formset_factory(BulkAddInstanceForm, extra=int(input_data['copies']))
formset = InstanceFormSet(initial=[data, ])
「コピー」量のフォームと、データを含む別のフォームセットを作成します。これを行う場合
formset = InstanceFormSet(initial=[data, data])
次に、データを含む2つの追加フォームを取得します。したがって、私の考えは、「コピー」数の辞書を追加し、フォームセット内のフォームの初期数をゼロにするイテレータが必要です。
私はまだそれをタラにする方法を知っているわけではありません!!