سؤال

لدي نماذج مختلفة تماما في قالب واحد. كيفية معالجة لهم في عرض واحد؟ كيف يمكنني التمييز بين أي من النماذج؟ كيف يمكنني استخدام البادئة لإغراء ذلك؟ أو ربما من الأفضل كتابة وجهات نظر منفصلة؟

مع تحياتي
chriss.

هل كانت مفيدة؟

المحلول

شخصيا، كنت أستخدم وجهة نظر واحدة للتعامل مع وظيفة كل نموذج.

من ناحية أخرى، يمكنك استخدام عنصر مدخلات مخفية تشير إلى أي شكل يستخدم

<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>

مع رؤية مثل:

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(),
    })

... ولكن مرة أخرى، أعتقد أن عرض واحد لكل شكل (حتى إذا كان العرض يقبل فقط الوظائف) أبسط من محاولة القيام بما سبق.

نصائح أخرى

مثل AYAZ قال، يجب عليك إعطاء اسم فريد لتشكيل زر إرسال

<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:
    ...

إذا كانت النموذجان مختلفان تماما، فسيؤذي بالتأكيد أن يتم التعامل معها من خلال وجهات نظر مختلفة. خلاف ذلك، يمكنك استخدام خدعة "عنصر الإدخال المخفي" زاكز وقد لمست. أو، يمكنك دائما إعطاء كل submit عنصر أ فريدة من نوعها الاسم، والتمييز في عرض الشكل الذي تم تقديمه بناء على ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top