如何在Django的一个/单个页面中创建多个表单? [英] How to create multiple forms in one/single page in Django?

查看:354
本文介绍了如何在Django的一个/单个页面中创建多个表单?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在页面中使用2种不同的形式。但是,当我尝试保存表单的值时,它们仅保存在form_fridge中。我认为这是存在的,因为我将一个csrf_token用于2种形式。您能帮我吗?

I want to have 2 different forms in my page. But when I try save value of forms, they are saved only in form_fridge. I think, it exists, because I use one csrf_token for 2 forms. Can you help me?

    <form method="POST" enctype="multipart/form-data" id = "formTv">
    {% csrf_token %}
    {{ form_tv.as_p }}
    <button type="submit" class="save btn btn-default">Save</button>
    </form>

    <form method="POST" enctype="multipart/form-data" id = "formFridge">
    {% csrf_token %}
    {{ form_fridge.as_p }}
    <button type="submit" class="save btn btn-default">Save</button>
    </form>

views.py

def add_new(request):
    form_fridge = FridgeForm(request.POST, request.FILES, use_required_attribute=False)
    form_tv = TvForm(request.POST, request.FILES, use_required_attribute=False)
    if form_fridge.is_valid() and request.method == 'POST':
        form_fridge.save()
        return redirect('new')
    elif form_tv.is_valid() and request.method == 'POST':
        form_tv.save()
        return redirect('new')
    return render(request, 'appliances/add_new.html', {'form_tv': form_tv,
                                                       'form_fridge': form_fridge})


推荐答案

您应该添加一个隐藏字段,以区分提交的表单。

You should add a hidden field, to distinguish which form was submitted.

<form method="POST" enctype="multipart/form-data" id = "formTv">
    {% csrf_token %}
    {{ form_tv.as_p }}
    <input type="hidden" id="form_type" name="form_type" value="form_tv">
    <button type="submit" class="save btn btn-default">Save</button>
    </form>

    <form method="POST" enctype="multipart/form-data" id = "formFridge">
    {% csrf_token %}
    {{ form_fridge.as_p }}
    <input type="hidden" id="form_type" name="form_type" value="form_fridge">
    <button type="submit" class="save btn btn-default">Save</button>
    </form>

因此,当提交其中一张表格时,您可以找到所提交的表格。

So when one of the forms is submitted, you can find which form was submitted.

#views.py
def add_new(request):
    if request.method == "POST":  #check if the request is POST call or not.
        form_type = request.POST.get("form_type")
        form = None
        # check which form to evaluate
        if form_type == "form_fridge":
            form = FridgeForm(request.POST, request.FILES, use_required_attribute=False)

        if form_type == "form_tv":
            form = TvForm(request.POST, request.FILES, use_required_attribute=False)

        # evaluate the form
        if form and form.is_valid():
            form.save()
            return redirect('new')

    return render(request, 'appliances/add_new.html', {'form_tv': form_tv,
                                                       'form_fridge': form_fridge})

这篇关于如何在Django的一个/单个页面中创建多个表单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆