Django, sous forme de questions valides
-
19-09-2019 - |
Question
J'ai 3 formes à la même page et chacun a une forme différente soumettre. Tels que:
<h1>Address</h1>
<form method="post" id="adress_form" action=/profile/update/>
{{ form_address.as_p }}
<p><button type="submit">Save</button></p>
</form>
<h1>Email Change</h1>
<form method="post" id="email_form" action=/profile/update/>
{{ form_email.as_p }}
<p><button type="submit">Save</button> </p>
</form>
<h1>Password Change</h1>
<form method="post" id="password_form" action=/profile/update/>
{{ form_password.as_p }}
<p><button type="submit">Save</button></p>
</form>
Par souci de simplicité, je ne comprend pas les scripts post ajax, mais soumettre chacun sera interrogé par ajax.
Maintenant, je veux faire traiter tout à la même page, /profile/update/
Pour cela, je dois vérifier quel formulaire est affiché. Si donner une réponse affichée et valide, si une autre donne pas de réponse.
@login_required
def profile_update_view(request):
if request.method == 'POST' and request.is_ajax()::
user = request.user
form_adress = AdressForm(request.POST)
form_email = EmailForm(request.POST)
form_password = PasswordChangeForm(request.POST)
if <CHECK IF THE SUBMIT IS AN ADDRESS FORM>
if form_adress.is_valid():
#update and return a json response object with "adress updated successfully." for ajax
else:
answer = {'answer': "Couldn't update. Your form is not valid"}
return HttpResponse(simplejson.dumps(answer), mimetype="application/json")
if <CHECK IF THE SUBMIT IS AN EMAIL FORM>
if form_email.is_valid():
#update and return a json response object with "email updated successfully." for ajax
else:
answer = {'answer': "Couldn't update. Your form is not valid"}
return HttpResponse(simplejson.dumps(answer), mimetype="application/json")
if <CHECK IF THE SUBMIT IS AN PASSWORD FORM>
if form_password.is_valid():
#update and return a json response object with "password changed successfully." for ajax
else:
answer = {'answer': "Couldn't update. Your form is not valid"}
return HttpResponse(simplejson.dumps(answer), mimetype="application/json")
else:
return HttpResponse(u"ONLY AJAX QUERIES PLEASE", mimetype="text/plain", status=403)
Je dois en quelque sorte de savoir quelle forme est affichée. Comment puis-je faire?
La solution
Pourriez-vous pas mettre juste une entrée cachée dans chaque forme w / un identifiant, et puis juste vérifier que votre point de vue?
<h1>Address</h1>
<form method="post" id="adress_form" action=/profile/update/>
<input type="hidden" name="_address" />
{{ form_address.as_p }}
<p><button type="submit">Save</button></p>
</form>
puis dans la vue:
if '_address' in request.POST:
if form_adress.is_valid():
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow