【问题标题】:How to split fields of model class between different views and templates to take inputs in different forms?如何在不同视图和模板之间拆分模型类的字段以获取不同形式的输入?
【发布时间】:2021-03-21 16:21:16
【问题描述】:

我的 models.py 中有一个名为“Client”的类,它有不同的字段,例如(名称、dob 等)。我在 views.py 中有一个名为“ClientCreateView”的视图,其中我在客户端类的某些字段(不是所有字段)中进行输入。用于此的模板称为“client_form.html”。

相关文件如下:

models.py:

class Client(models.Model):
    name = models.CharField(max_length = 100)
    dob = models.SlugField(max_length = 100)
    CNIC = models.SlugField(max_length = 100)
    property_type = models.CharField(max_length = 100)
    down_payment = models.IntegerField()
    date_posted = models.DateTimeField(default=timezone.now)
    installment_month = models.CharField(max_length = 100)
    installment_amount = models.IntegerField(default = 0)

views.py:

class ClientCreateView(CreateView):
    model = Client
    fields = ['name', 'dob', 'CNIC', 'property_type', 'down_payment']



class AddInstallmentView(CreateView):
    model = Client
    fields = ['installment_month', 'installment_amount']

client_form.html

{% extends "property_details/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content_section">
    <form method="post">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4"> Add New Client</legend>
        {{ form|crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Add Client</button>
      </div>
    </form>
</div>

{% endblock %}

现在您可以看到,我在 views.py 中的前五个字段(name、dob、CNIC、property_type、down_payment)中输入了输入,因为这些是唯一需要的字段将新客户端添加到我的数据库中。

一旦客户端被添加到数据库中。我想为添加的客户添加分期付款。所以我创建了一个名为“AddInstallmentView”的新视图(参见上面的views.py)

下面给出的 html 表单是“addinstallment_form.html”:

addinstallment.html

{% extends "property_details/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content_section">
    <form method="post">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4"> Add New Installment</legend>
        {{ form|crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Add Installment</button>
      </div>
    </form>
</div>

{% endblock %}

现在,当我运行服务器并尝试添加客户端时。它有效!

但是当我尝试向客户端添加分期付款时。我看到包含两个字段(分期付款,分期付款)的表格。但是我看到的图例是'添加新客户端',实际上是'client_form.html'中的图例(见上文),提交按钮也来自'client_form.html ' 即 'Add Client',但图例应为 'Add New Installment',提交按钮应为 'Add Installment'。

好像我只有AddInstallmentView的字段,但模板仍然是'client_form.hmtl'。

有没有人知道如何解决这个问题。

【问题讨论】:

    标签: python html django templates


    【解决方案1】:

    默认情况下,django 使用 (modelname_form.html) 查找模板名称

    由于您的模型是两个视图都在寻找“client_form.html”,您应该通过添加来更改 AddInstallmentView 中的模板名称

    template_name = "path/addinstallment.html" 
    

    【讨论】:

    • + 我认为它会给你一个错误,因为你应该在你的模型中添加 (blank=TRUE) 到 ('installment_month',) 并将 AddInstallmentView 更改为从 updateview 继承而不是 createview 因为你不'不想创建另一个对象,而只是编辑现有的对象
    猜你喜欢
    • 2021-01-03
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多