【问题标题】:How to connect 2 forms in HTML and Django?如何在 HTML 和 Django 中连接 2 个表单?
【发布时间】:2022-01-29 00:41:53
【问题描述】:

我正在创建一个网页,我想知道是否可以确保在按下蓝色按钮之前填充左侧的数据。在左侧,您可以看到通过输入您的地址、城市等进行支付的表格,但在右侧,您可以看到另一个带有条纹的表格,用于使用信用卡支付。我不知道如何从左侧获取数据并将其保存在数据库中,以便我可以在付款成功后创建收据。这是下面的代码。

<div class="container-2">
    <div class="gray-hover">
        <form method="POST">
            <div class="item" id="payment">
                <div class="row">
                    <h4>Možnost nakupa 1: Plačilo po povzetju <small><i>(Za plačevanje s kartico je treba izbrati samo
                                količino in vrsto izdelka!)</i></small></h4>
                    {% csrf_token %}
                    {% if form %}
                    <div class="input-group">
                        <div style="color: red;">{{ form.name.errors }}</div>
                        {{ form.name }}
                    </div>
                    <div class="input-group">
                        <div style="color: red;">{{ form.last_name.errors }}</div>
                        {{ form.last_name }}
                    </div>
                    <div class="input-group">
                        <div style="color: red;">{{ form.street_name.errors }}</div>
                        {{ form.street_name }}
                    </div>
                    <div class="input-group">
                        <div style="color: red;">{{ form.city_name.errors }}</div>
                        {{ form.city_name }}
                    </div>
                    <div class="input-group">
                        <div style="color: red;">{{ form.email.errors }}</div>
                        {{ form.email }}
                    </div>
                    <div class="input-group">
                        <div style="color: red;">{{ form.number.errors }}</div>
                        {{ form.number }}
                    </div>
                    {% endif %}

                </div>
            </div>
            <div class="item" id="payment2">
                <div class="row">

                    <div class="input-group">
                        {{ form.num_elements.errors }}
                        {{ form.num_elements }}
                    </div>
                    <div class="input-group" id="check_div">
                        <div
                            style="display: flex;width:100%;justify-content: space-between;align-items: center;font-size:medium;flex-wrap: wrap;">
                            <div style="display: flex;justify-content: space-between;margin:3px;">
                                {{ form.select_type.errors }}
                                {{ form.select_type.label_tag }}
                                {{ form.select_type }}
                            </div>

                            <div style="display: flex;justify-content: space-between;margin:3px;">
                                {{ form.select_type2.errors }}
                                {{ form.select_type2.label_tag }}
                                {{ form.select_type2 }}
                            </div>

                        </div>
                    </div>
                    <div class="input-group">
                        {{ form.warning_el.errors }}
                        {{ form.warning_el }}
                    </div>
                    <div style="display: flex;justify-content: space-between;margin: 0.5rem;">
                        <button class="button" type="submit" id="button"> Naroči <small>(povzetje)</small></button>
                        <a class="button" id="stripe-button">Plačaj s kartico!</a>
                    </div>
                </div>
            </div>
        </form>

    </div>
    <div class="gray-hover">
        <div class="item" id="payment3" style="width:100%;">
            <h4>Možnost nakupa 2: Plačilo s kartico <small><i>(Za plačevanje s kartico je treba izbrati samo
                        količino in vrsto izdelka!)</i></small></h4>
            <div class="row" style="display: flex; justify-content: center;">
                <form id="payment-form" data-locale="si" style="width:100%;">
                    <div id="payment-element">
                        <!--Stripe.js injects the Payment Element-->
                    </div>
                    <button id="submit" class="button1">
                        <div class="spinner hidden" id="spinner"></div>
                        <span id="button-text">Plačaj</span>
                    </button>
                    <div id="payment-message" class="hidden"></div>
                </form>
            </div>
        </div>

    </div>

</div>

这是“CONTAINER-2”的屏幕截图

【问题讨论】:

  • 分享您的views.pyforms.py。所有的后端都在那里。 :)

标签: python html css django web


【解决方案1】:

首先确保您的所有输入都在一个表单和一个视图下。

在您的 Django 表单中使用 required=True 以确保输入每个输入。

如果你使用的是 Django 表单,例如

from django import forms
class FooForm(forms.Form):
     email = forms.EmailField(max_length=100,required=True,
                               widget=forms.TextInput(
                               attrs={ 'required': 'true' }),
     )

在您看来,请使用表单 is_valid 方法

form = FooForm(request.POST)
if form.is_valid():
  # Complete Your Business Logic
  ...
  return redirect("redirect_view")
# Else Return With Error Message

使用表单来保存您的数据。如果不能使用 Django 表单,则必须使用 javascript 禁用按钮,直到所有输入都未填满

【讨论】:

  • 我确实尝试使用 javascript,但是当我使用 document.getElementById() 时,即使表单中的数据已填充并且所有内容都已更新,因为我在函数中声明了变量,该函数在之后触发每次我点击“蓝色”按钮。
  • 哦,我用 .val 而不是 .value xD
  • 是的,这曾经发生在我身上,哈哈
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2018-03-13
  • 2018-11-08
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
相关资源
最近更新 更多