1

この 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つの追加フォームを取得します。したがって、私の考えは、「コピー」数の辞書を追加し、フォームセット内のフォームの初期数をゼロにするイテレータが必要です。

私はまだそれをタラにする方法を知っているわけではありません!!

4

2 に答える 2

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)

そのため、フォームセットを作成し、データ辞書のリストを作成してから、フォームセットに初期データをリストとして入力します。

まだ情報を収集して送信する方法を考え出さなければなりませんが、これまでのところうまくいっているようです。

于 2012-08-21T13:12:06.137 に答える
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)

それがあなたを助けることを願っています。

于 2012-08-20T15:49:30.020 に答える