首页 > 解决方案 > 如何在不同的视图和模板之间拆分模型类的字段以获取不同形式的输入?

问题描述

我的models.py中有一个名为“ Client ”的类,它有不同的字段,如(名称、dob .. 等)。我在views.py中有一个名为“ ClientCreateView ”的视图,我在其中输入 Client 类的某些字段(不是所有字段)。这个模板叫做' client_form.html '。

相关文件如下:

模型.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)

视图.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中的前五个字段(名称、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 ” ,但是图例应为“添加新分期付款”,提交按钮应为“添加分期付款”。

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

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

标签: pythonhtmldjangotemplates

解决方案


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

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

template_name = "path/addinstallment.html" 

推荐阅读