0

インライン フォームセットとして表されるモデルと外部キー モードを含むフォームがあります。注文したフォームセットを保存するのに大変な時間を費やしています。実際、1つ削除しようとするたびに、倍増します。

forms.py で:

class PublicationForm(ModelForm):
    class Meta:
        model = Publication
        fields = ['title']

SectionFormSet = inlineformset_factory(Publication, Section, can_delete=True, can_order=True, extra=2)

そしてviews.pyで:

if publication_form.is_valid():
    pub = publication_form.save(commit=False)
    section_formset = SectionFormSet(request.POST, instance=pub, prefix='section')
    if section_formset.is_valid():
        pub.save()
        for s in section_formset.ordered_forms:
            s.instance.order = s.cleaned_data['ORDER']
            s.save()

私はSOを気に入りましたが、何も見つかりませんでした。誰にも解決策がありますか?

ありがとう!!

4

1 に答える 1

0

はい、あなたはすべてごちゃごちゃした貯蓄を持っています。このようなもの:

1 - フォームセットは SectionForm のセットを保持しているため、間違ったループでフォームが有効であることをテストしています。あなたはこれを求めている:

if request.method == 'POST':
    section_formset = SectionFormSet(request.POST, instance=<an instance of Publication>, prefix='section')
    if section_formset.is_valid():
        instances = section_formset.save(commit=False)
        for instance in instances:
             #do something
             instance.save()
        return HttpResponseRedirect('<a url>')
else:
    section_formset = SectionFormSet(instance=<an instance of Publication>, prefix='section')

セクション フォームの「順序」値をセクション モデルの順序属性に保存するだけの場合は、インスタンス ループを実行する必要はありません。section_formset.save() を呼び出すだけです。

于 2013-09-11T22:35:00.197 に答える