如何从Django的TabularInline管理视图中省略对象名称?

pay*_*yne 28 django django-admin

我正在使用Django的TabularInline管理视图来编辑与主要主题对象相关的类别对象,如下所示:

在此输入图像描述

有没有办法显示对象的呈现名称(本例中的"常见问题","媒体处理和边距"等),而无需创建自定义管理模板?换句话说,我只想显示一个干净的输入字段网格.

我找到了相关的渲染代码在这里,在这个片段:

   ...
        <td class="original">
          {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
          {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
          {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
            </p>{% endif %}
   ...
Run Code Online (Sandbox Code Playgroud)

是否有一个简短,聪明的方法来省略{{ inline_admin_form.original }}或让它返回Null?

小智 56

@ sjaak-schilperoort不错!CSS确实是使用的'技巧'.Foo具有Bar内联的类的示例.

static/css/hide_admin_original.css:

td.original p {
  visibility: hidden
}

.inline-group .tabular tr.has_original td {
    padding-top: 5px;
}
Run Code Online (Sandbox Code Playgroud)

admin.py:

class FooAdmin(admin.ModelAdmin):
  inlines = [ BarInline, ]
  class Media:
    css = { "all" : ("css/hide_admin_original.css",) }

admin.site.register(Foo, FooAdmin)
Run Code Online (Sandbox Code Playgroud)

  • 将`padding-top`更改为5px以与没有has_original的行保持一致 (3认同)

Yuj*_*ita 6

我想我会同意编辑您的模板将是最简单的。

我尝试迭代中的表单集,render_change_form但不幸的是,主要问题是InlineAdminForms 是在模板中的迭代时动态构造的,因此您不能只设置inlineadminform.original = None或修改上下文。

在模板中分配变量之前,它们甚至不存在。

# InlineAdminFormset
def __iter__(self):
    for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()):
        yield InlineAdminForm(self.formset, form, self.fieldsets,
            self.opts.prepopulated_fields, original, self.readonly_fields,
            model_admin=self.model_admin)
Run Code Online (Sandbox Code Playgroud)

并且我们拥有的唯一一个容易非hackishly访问的钩子是覆盖InlineAdminFormset.formset.get_queryset()其他东西的覆盖。

我可以分享一些没有人应该真正看过但有效并让我开怀大笑的代码吗?我欠你一张payne。希望今晚我能睡着。