如何在 Django 中只显示表单中的一个字段

Posted

技术标签:

【中文标题】如何在 Django 中只显示表单中的一个字段【英文标题】:How to just display one field from the form in 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 谢谢...你的方法奏效了! 【参考方案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。

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

【讨论】:

以上是关于如何在 Django 中只显示表单中的一个字段的主要内容,如果未能解决你的问题,请参考以下文章

仅从模板中的 django 表单中获取一个字段

如何在Django中只在ModelForms表中正确提交一个表单?

已解决:如何在 Django 中的表单错误中重新显示带有选定值的表单集和 Select2 字段

Django:如何在手动表单字段中显示模型的外键对象作为选择

Django 向导表单中的条件表单字段

如何在 django 表单中获取员工用户的用户名