在Django adminform模板中直接访问字段?

4jb9z9bj  于 2023-05-23  发布在  Go
关注(0)|答案(3)|浏览(137)

我有一吨的领域,我需要布局(重新排序)在一个特定的方式的形式(与其他一些额外的html的东西)。我为我的模型创建了 change_form.html 文件,它本身就可以工作。
问题是所有的例子都在字段上循环,我只想通过名称引用每个字段。

# this works
{% for fieldset in adminform %}
  {% for line in fieldset %}
    {% for field in line %}
      <p>{{ field.field }}</p>
    {% endfor %}
  {% endfor %}
{% endfor %}
  • 我知道你可以自定义admin.ModelAdmin与字段集等。但这不是我想要的 *

我尝试了不同的方法,如下所示,但它不工作:

# assuming the admin model has the fields: first_name & last_name
{% block content %}

  <!-- doesn't work !!! ->
  {{ adminform.fieldsets.0.1.fields.first_name.field }}
  {{ adminform.fieldsets.0.1.fields.last_name.field }}

  <!-- neither does this -->
  {{ adminform.fields.first_name.field }}
  {{ adminform.fields.last_name.field }}

{% endblock %}

现在这不起作用,有没有什么有效的方法可以直接访问我需要的字段?

kognpnkq

kognpnkq1#

我看的方向完全错了。它实际上非常简单,你可以使用它如下。
当你有一个带有last_name字段的模型时,你可以访问这个字段:

# change_form.html (custom)
{% extends "admin/change_form.html" %}
{% block field_sets %}

    # get the label
    <label for="{{ adminform.form.last_name.label }}">
       {{ adminform.form.last_name.id_for_label }}
    </label>

    # get the html widget
    {{ adminform.form.last_name }}

    # get the field value
    {{ adminform.form.last_name.value }}

    # create your own input (without the label)
    <input name="{{ adminform.form.last_name.html_name }}">

    # some other fields you can reference
    {{ adminform.form.last_name.max_length }}
    {{ adminform.form.last_name.required }}
    {{ adminform.form.last_name.help_text }}
    {{ adminform.form.last_name.label_suffix }}
{% endblock %}
w8f9ii69

w8f9ii692#

你可以创建一个ModelForm在你的ModelAdmin中使用,查看文档-> https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
另一种方法是设置字段tuple,docs here -> https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields
希望这能引导你走上正确的道路。

z9ju0rcb

z9ju0rcb3#

你可以用{{ original }}调用object。如果你有场:last_name你可以在模板中这样调用它{{ original.last_name }}

相关问题