Django表格内联显示

时间:2012-04-01 08:47:59

标签: django django-forms django-admin

是否可以更改内联的显示以将其更改为this?我正在考虑更改管理模板文件“tabular.html”,是否可以或者我应该更改其他内容?

更新

好的,我一直在尝试编辑tabular.html,但我对Django的体验还不足以理解如何/在哪里进行必要的更改......任何关于我应该从哪里开始的线索? 我不应该也在改变CSS吗? 我想{{field.field}}会自动呈现下拉菜单(Django admin default),如果我理解正确的话......

更新2

我能够将第二列更改为我想要的功能,但我认为对于第一列,它会变得更加棘手......当前status

更新3

我认为可行的一个hack是在每个内联中仅显示第一个字段的一个选项,然后停用“添加另一个选项”。如何迭代“tabular.html”中的选项?

更新4

我想这个诀窍应该在这里完成......我如何迭代字段选择以便每行只显示一个选项?

{% for fieldset in inline_admin_form %}
          {% for line in fieldset %}
            {% for field in line %}
            {{ field.get_choices_display }}
              <td class="{{ field.field.name }}">
              {% if field.is_readonly %}
                  <p>{{ field.contents }}</p>
              {% else %}
                  {{ field.field.errors.as_ul }}
                  {{ field.field }}
              {% endif %}
              </td>
            {% endfor %}
          {% endfor %}
        {% endfor %}

1 个答案:

答案 0 :(得分:4)

是的,您可以将InlineModelAdmin实例的template更改为自定义模板,例如customized_inline.html。只需将django / django / contrib / admin / templates / admin / edit_inline / tabular.html复制到模板路径中的customize_inline.html即可。

修改

也许我误会了。如果要更改表单字段的呈现样式,通常的方法是更改​​其widget。在Django ModelAdmin和InlineModelAdmin中,自定义字段小部件的主要方法是在BaseModelAdmin.formfield_for_dbfield内部使用django/contrib/admin/options.py方法,在您想要更改表单字段的窗口小部件时读取代码和the doc

对于有选择的字段,您只需在ModelAdmin / InlineModelAdmin实例中设置radio_fields即可将字段呈现为无线电选择而非下拉列表。

此外,使用OneToOneField而不是ForeignKey,或在InlineModelAdmin实例中设置extramax_num以防止管理员呈现多行内联,例如:

class SomeInlineAdmin(admin.TabularInline):
    model = Foo
    extra = 1
    max_num = 1

我无法打开您的第二个链接,您可以在问题中发布内容而不是使用外部链接。