簡體   English   中英

如何在不同的視圖和模板之間拆分 model class 的字段以獲取不同 forms 中的輸入?

[英]How to split fields of model class between different views and templates to take inputs in different forms?

我的models.py中有一個名為“ Client ”的 class,它有不同的字段,如(姓名、出生日期等)。 我在views.py中有一個名為“ ClientCreateView ”的視圖,我在其中輸入了客戶端class 的某些字段(不是所有字段)。 這個模板叫做' 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 ',如下所示:

添加安裝。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 '。

有誰知道如何解決這個問題。

默認情況下 django 使用 (modelname_form.html) 查找模板名稱

由於您的模型是兩個視圖都在尋找“client_form.html”,您應該通過添加更改 AddInstallmentView 中的模板名稱

template_name = "path/addinstallment.html" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM