如何修改as_field_group方法来更改其返回值的顺序?
目前,该方法返回标签、错误消息,然后返回输入字段。但是,我想自定义它,以便它首先返回标签,然后返回输入字段,最后返回错误消息。
如何重写或自定义 as_field_group 方法来实现此目的?
您可以将自定义模板添加到字段作为 template_name 属性。
from django import forms
from .models import Stock
class StockForm(forms.ModelForm):
price = forms.IntegerField(template_name="stock/custom_field.html", label="Stock-Price")
class Meta:
model = Stock
fields = ('name', 'price')
如上所示,Stock模型的价格字段将使用custom_field.html。
template_name 的默认值是 django 提供的 forms/templates/field.html。
换句话说,对于StockForm模型,custom_field.html应用于Price字段,Django提供的field.html模板应用于Name字段。
stock_edit.html
{% extends 'stock/base.html' %}
{% block content %}
<h1>New Stock</h1>
<form method="POST" class="stock-form">{% csrf_token %}
<div class="fieldWrapper">
{{ form.name.as_field_group }}
</div>
<div class="fieldWrapper">
{{ form.price.as_field_group }}
</div>
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
自定义字段.html
{% if field.use_fieldset %}
<fieldset{% if field.help_text and field.auto_id and "aria-describedby" not in field.field.widget.attrs %} aria-describedby="{{ field.auto_id }}_helptext"{% endif %}>
{% if field.label %}{{ field.legend_tag }}{% endif %}
{% else %}
{{ field }}{% if field.use_fieldset %}</fieldset>{% endif %}
{% if field.label %}{{ field.label_tag }}{% endif %}
{% endif %}
{{ field.errors }}
我的 custom_html 模板在标签之前有输入部分用于测试。
查看上图,您可以检查custom_field.html是否应用于价格字段。
我的测试是针对现场的。 如果您想涉足所有领域,请参阅这篇文章。