これで、1つのページに2つの異なるタグで区切られた2つのフォームタグを作成しようとしています。私はこれをどのように処理できるのだろうかと思っています。 別のアクションURLを使用すれば、簡単に処理できます。しかし、妥当性チェックのエラーがある場合、それはフォームに提出されているURLに行き、私はそれを望んでいません。私はそれがなぜ私が行動= ''を作っているのかをページの中にとどめておきたい。ここでDjango - 同じアクション属性を持つ単一ページ上の2つのフォームタグ
HTMLで
<!-----------template.html----------->
<div class=" tab">
<!-- Nav tabs -->
<div class="card">
<ul class="nav navbar-nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Info 1</a></li>
<li role="presentation"><a href="#groups" aria-controls="groups" role="tab" data-toggle="tab">Info 2</a></li>
</ul>
</div>
</div>
<div class="tab-content">
<!--Personal Info -->
<div class="row tab-pane active" role="tabpanel" id="home">
<!-- edit form column -->
<div class="info1">
{% include template1 %}
</div>
</div>
<div role="tabpanel" class="tab-pane" id="groups">
<div class="info2">
{% include template2 %}
</div>
</div>
</div>
<!-----------template1----------->
<form method='post' action='' class="form-horizontal" role="form">
{%csrf_token%}
<input value=something>
<input type="submit" value="Save Changes" name="{{formA.prefix}}">
</form>
<!-----------template2----------->
<form method='post' action='' class="form-horizontal" role="form">
{%csrf_token%}
<input value=something>
<input type="submit" value="Save Changes" name="{{formA.prefix}}">
</form>
これを解決しようとする試みのためのコードです:
VIEWS.PY
def _get_form(request, form_class, prefix):
data = request.POST if prefix in request.POST else None
return form_class(data, prefix = prefix)
class MyView(LoginRequiredMixin,TemplateView):
login_url = '../login/'
template_name = 'template.html'
def get(self, request, *args, **kwargs):
return self.render_to_response({'formB':FormB(prefix='prefixA-'),'formB':FormB(prefix='prefixB-')})
def post(self, request, *args, **kwargs):
formA = _get_form(request, FormA, 'payment-')
formB = _get_form(request, FormB, 'user-')
if formA.is_bound and formA.is_valid():
# Do Something
elif formB.is_bound and formB.is_valid():
# Do Something
# Update user
obj = userForm.save(commit=False)
logger.error(obj.first_name)
obj.save()
return self.render_to_response({'paymentForm':paymentForm, 'userForm':userForm})
FORMS.PY
class FormB(forms.ModelForm):
class Meta:
model = User
fields = [some fields]
widgets = {
'password': forms.PasswordInput(),
}
def save(self, commit=True):
user = super(FormB, self).save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
user.save()
return user
class FormA(forms.ModelForm):
class Meta:
model = User
fields = [some fields]
def save(self, commit=True):
user = super(FormA, self).save(commit=False)
return user
私は間違っていますが、フォームは送信されないか、または.is_valid()が失敗し、フォームは実際に何もしません。誰もが私を解決するのを助けてくださいお願いしますか? ありがとうございました!
どのようにフォームを提出していますか?両方の書式を同時に提出する意思はありますか?またはどちらか他の人ですか? –
それはどちらか一方です。 それぞれには別に送信ボタンがあります。 実際、formBはユーザー情報を更新するためのものなので、私はいくつかのフォームに分割することも考えていました。ユーザーが編集ボタンをクリックすると、各フィールドを個別に編集することができます。 –
こんにちはジョン!これは非常に解決しやすい問題ですが、心配しないでください!あなたはDjangoで何かできます:)フォームの無効時にリダイレクトされるURLの問題の要点は私の理解です。各フォームには「MyView」とは別のビューがありますか?無効な場合、代わりにどのビューが返されますか? (まだインストールされていなければ、ビューのデバッグに役立つdjango-debug-toolbarを入手してください。) – ninapavlich