Wie zwei Formen in einer Ansicht bearbeiten?
-
23-08-2019 - |
Frage
Ich habe zwei ganz andere Formen in einer Vorlage. Wie sie in einer Ansicht bearbeiten? Wie kann ich die von den Formen unterscheiden vorgelegt wurde? Wie kann ich Präfix verwenden, die zu erledigenden? Oder vielleicht ist es besser, separate Ansichten zu schreiben?
Grüße
chriss
Lösung
Persönlich würde ich eine Ansicht verwenden, um jede Form des POST zu behandeln.
Auf der anderen Seite könnten Sie ein verstecktes Eingabeelement verwenden, die angeben, welches Formular verwendet wurde,
<form action="/blog/" method="POST">
{{ blog_form.as_p }}
<input type="hidden" name="form-type" value"blog-form" /> <!-- set type -->
<input type="submit" value="Submit" />
</form>
...
<form action="/blog/" method="POST">
{{ micro_form.as_p }}
<input type="hidden" name="form-type" value"micro-form" /> <!-- set type -->
<input type="submit" value="Submit" />
</form>
Mit einem Blick wie:
def blog(request):
if request.method == 'POST':
if request.POST['form-type'] == u"blog-form": # test the form type
form = BlogForm(request.POST)
...
else:
form = MicroForm(request.POST)
...
return render_to_response('blog.html', {
'blog_form': BlogForm(),
'micro_form': MicroForm(),
})
... aber noch einmal, ich glaube, eine Ansicht pro Form (auch wenn der Blick nur POSTs akzeptiert) ist einfacher als zu versuchen, die oben zu tun.
Andere Tipps
wie ayaz sagte, sollten Sie eindeutige Namen geben zu bilden Submit-Button
<form action="." method="post">
......
<input type="submit" name="form1">
</form>
<form action="." method="post">
......
<input type="submit" name="form2">
</form>
#view
if "form1" in request.POST:
...
if "form2" in request.POST:
...
Wenn die beiden Formen völlig unterschiedlich sind, wird es sicherlich nicht schaden, haben sie von zwei verschiedenen Ansichten behandelt werden. Andernfalls können Sie die ‚versteckte Eingabeelement‘ Trick zacherates hat berührt. Oder könnten Sie immer jedem submit
Elemente geben einen einzigartig Namen, und differenzieren in der Ansicht, die Form auf, die eingereicht wurde basiert.