3

だから私は周りを見回しましたが、この一見一般的なエラーを引き起こさなければならないという同じ問題を誰も抱えていないようです。次のように、html でいくつかのフォームをレンダリングしています。

<form method="post" action="">
{{ tags_formset.management_form }}

<!-- code displaying this formset -->
...
<!-- -->

    <form method="post" action="">
        {{ add_all_form.management_form }}
        {{ add_all_form.addTagsToAll }}
        <input type="submit" value="Add To Displayed Applicants" />
    </form>

    <form method="post" action="">
        {{ remove_all_form.management_form }}
        {{ remove_all_form.removeTagsFromAll }}
        <input type="submit" value="Remove From Displayed Applicants" />
    </form>
    <input type="submit" value="Save Changes" />
</form>

2 つの内部フォームがなかった場合、フォームセットが正しく表示され、送信ボタンが機能してフォームを送信します。2 番目の 2 つのフォームを追加すると、いくつかの問題が発生しました。

-送信ボタンが機能しなくなりました (ただし、フォームセットのフィールドの 1 つが選択されているときに Enter キーを押すと、フォームは送信されます)

- add_all_form の送信が機能し、適切に機能します (問題ではありませんが、次の点に関して興味深い...)

-remove_all_form は、「ManagementForm データが見つからないか、改ざんされています」という検証エラーによって機能しません。

フォームを作成する views.py コードは次のとおりです。

    TagsFormSet = formset_factory(TagsForm, formset=TagFormSet, extra=applicantQuery.count())
    if request.method == 'POST':
        tags_formset = TagsFormSet(request.POST, request.FILES, prefix='tags', applicants=applicantQuery)
        add_all_form = TagAddAllForm(request.POST, request.FILES, prefix='addForm', applicants=applicantQuery)
        remove_all_form = TagRemoveAllForm(request.POST, request.FILES, prefix='removeForm', applicants=applicantQuery)
        redirect = False
        if tags_formset.is_valid():
            for tagForm in tags_formset.forms:
                if 'tags' in tagForm.cleaned_data:
                    tagForm.saveTags()
                if 'removeTags' in tagForm.cleaned_data:
                    tagForm.deleteTags()                        
            redirect = True
        if add_all_form.is_valid():
            if 'addTagsToAll' in add_all_form.cleaned_data:
                add_all_form.saveTagsToAll()
            redirect = True
        if remove_all_form.is_valid():
            if 'removeTagsFromAll' in remove_all_form.cleaned_data:
                remove_all_form.deleteTagsFromAll()
            redirect = True
        if redirect:
            return http.HttpResponseRedirect('')
    else:
        initForms = []
        tags_formset = TagsFormSet(prefix='tags', applicants=applicantQuery)
        add_all_form = TagAddAllForm(prefix='addForm', applicants=applicantQuery)
        remove_all_form = TagRemoveAllForm(prefix='removeForm', applicants=applicantQuery)

私は文字通り何が間違っているのか理解できません。remove_all_form が機能しないのに add_all_form が機能する理由はわかりません。基本的に関連するすべてのものをコピーして貼り付けているためです (必要な場合は Forms.py ファイルからコードを投稿できますが、問題はないと思います.. .)

助けてください!

4

1 に答える 1

5

タグは 1 つだけ使用してください<form>。ここには必要な数の送信ボタンを配置でき、必要な数のフォームを表示できますが、すべてが 1 つの<form>タグ内にある必要があります。

その後、すべての管理データがフォーム送信で適切に送信され、問題が修正されるはずです。

<form method="post" action="">
{{ tags_formset.management_form }}

<!-- code displaying this formset -->
...
<!-- -->


    {{ add_all_form.management_form }}
    {{ add_all_form.addTagsToAll }}
    <input type="submit" value="Add To Displayed Applicants" />


>
    {{ remove_all_form.management_form }}
    {{ remove_all_form.removeTagsFromAll }}
    <input type="submit" value="Remove From Displayed Applicants" />
<input type="submit" value="Save Changes" />

ビューはそのままで構いません。

于 2013-04-18T05:50:30.203 に答える