如何在 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中只在ModelForms表中正确提交一个表单?
已解决:如何在 Django 中的表单错误中重新显示带有选定值的表单集和 Select2 字段