【问题标题】:How to just display one field from the form in Django如何在 Django 中只显示表单中的一个字段
【发布时间】:2020-03-09 14:22:29
【问题描述】:

我只想显示我创建的表单中的一个字段,但出现“无法解析剩余部分:”错误

这是我的 forms.py 文件

from django import forms
from .models import *

class ProductForm(forms.ModelForm):
 class Meta:
     model = Product
     fields = ('prod_name', 'company', 'quantity', 'price', 'units', 'prod_type')

这是我的 html 文件

{% extends 'base.html' %}

{% block body %}
 <div class="container">
    <form method="POST">
        <br>
        {% csrf_token %}
        {% for field in form %}
            {% if field.name=='units' %}
            <div class ="form-form row">
                <label for="id_{{field.name}}" class="col-2 col-form-label">{{field.label}}</label>
                <div class ="col-10">
                    {{field}}
                </div>
            </div>
            {% endif %}
        {% endfor %}
        <button type="submit" class="btn btn-primary" name="button">Update Sales</button>
    </form>         
</div>
{% endblock %}  

我只想在我的网页中为我正在创建的这个模块显示单元

【问题讨论】:

  • 为什么不制作一个只有一个字段的表单呢?这看起来更安全。
  • @WillemVanOnsem 谢谢...你的方法奏效了!

标签: python html django


【解决方案1】:

我认为你试图在错误的层面上解决问题。您可以只构建一个包含一个字段的表单:

from django import forms
from .models import *

class UnitProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('units',)

如果您还需要其他表单,您可以创建一个额外的表单,使用不同的名称,例如<b>Unit</b>ProductForm

使用包含字段子集的表单不仅更容易呈现。如果未指定模型对象的字段,则表单将不会修改这些字段,即使这些项目是在(伪造的)POST 请求中传递的。因此使用起来也更加安全。

【讨论】:

    【解决方案2】:

    如果您只想显示 prod_name 字段,那么您可以这样做: { 从 django 导入表格 从 .models 导入 *

    类 ProductForm(forms.ModelForm): 元类: 型号 = 产品 字段 = ('prod_name')

    }

    【讨论】:

      【解决方案3】:

      可以通过以下模板控制仅显示一个字段:

      {% extends 'base.html' %}
      
      {% block body %}
       <div class="container">
          <form method="POST">
              {% csrf_token %}
              {{ form.units.label_tag }} /*Shows the label for the input field */
              {{ form.units }} /*Shows the input field */
              <button type="submit" class="btn btn-primary" name="button">Update Sales</button>
          </form>         
      </div>
      {% endblock %}  
      

      这是来自官方文档,找到here

      请注意,如果您选择仅显示这样的某些字段,则必须在后端处理对象的创建。

      【讨论】:

        猜你喜欢
        • 2022-12-18
        • 2011-10-11
        • 2022-12-14
        • 2012-03-09
        • 2011-01-15
        • 2021-01-24
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多