0

「追加」ビューに次のフォームセットがあります。ユーザーはフォームを動的に追加でき、それらの追加/保存は完全に機能します。ここでの問題は、このフォームセットを編集用に事前設定する良い方法を見つけられないことです。編集中のユーザーは、フォームセットからフォームを追加および削除できる必要があります。

意見

ClassificationFormset = formset_factory(ClassificationForm)
classification_formset = ClassificationFormset(prefix='habitat_fs')

カスタムフォーム

class ClassificationForm(forms.Form):

classification = ClassificationField(
    label=_('Habitat Classification'),
    required=False,
    queryset=Classification.objects.all(),
)

community = CommunityField(
    label=_('Community'),
    required=False,
    queryset=Community.objects.none(),
)

def save(self, habitat_id, *args, **kwargs):
    data = self.cleaned_data
    if data:
        habitat_community = Habitat_Community()
        habitat_community.habitat = habitat_id
        habitat_community.community = data['community']
        habitat_community.save()

これまでのところ、 initをオーバーライドしてフィールドに入力しようとしました...

def __init__(self, *args, **kwargs):
    habitat = kwargs.pop('habitat', None)
    super(ClassificationForm, self).__init__(*args, **kwargs)
    # Populate fields here based on habitat

...しかし、formset_factory では、フォームにパラメーターを渡すことはできません。

ClassificationFormset = formset_factory(ClassificationForm(habitat=habitat_id))
4

1 に答える 1

0

通常のフォームと同様にフォームごとにイニシャルを設定できます。

def some_method(request):
    ClassificationFormset = formset_factory(ClassificationForm)
    classification_formset = ClassificationFormset(prefix='habitat_fs')
    for form in classification_formset:
        form.initial = {"habitat": "some value"}

明確にするために編集されています。

于 2013-05-29T15:19:33.500 に答える