Django as_field_group?

问题描述 投票:0回答:1

如何修改as_field_group方法来更改其返回值的顺序?

目前,该方法返回标签、错误消息,然后返回输入字段。但是,我想自定义它,以便它首先返回标签,然后返回输入字段,最后返回错误消息。

如何重写或自定义 as_field_group 方法来实现此目的?

django forms
1个回答
0
投票

您可以将自定义模板添加到字段作为 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 模板在标签之前有输入部分用于测试。

enter image description here

查看上图,您可以检查custom_field.html是否应用于价格字段。

我的测试是针对现场的。 如果您想涉足所有领域,请参阅这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.