我正在使用Django的TabularInline
管理员视图来编辑与主要主题对象相关的类别对象,如下所示:
有没有办法不显示对象的呈现名称(本例中的“常见问题”,“媒体处理和边距”等),没有创建自定义管理模板?换句话说,我只是想显示一个干净的输入字段网格。
我在这个片段中找到了相关的渲染代码here:
...
<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 %}
...
是否有一种简短明智的方法可以省略{{ inline_admin_form.original }}
或让它返回Null?
答案 0 :(得分: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;
}
admin.py
:
class FooAdmin(admin.ModelAdmin):
inlines = [ BarInline, ]
class Media:
css = { "all" : ("css/hide_admin_original.css",) }
admin.site.register(Foo, FooAdmin)
答案 1 :(得分:4)
我认为我想编辑你的模板将是最简单的。
我尝试迭代render_change_form
中的表单集但不幸的是,主要的问题是InlineAdminForm
是在模板中迭代时动态构造的,因此您不能只设置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)
并且我们拥有的唯一容易非黑客可访问的钩子覆盖了InlineAdminFormset.formset.get_queryset()
,这打破了其他事情。
我可以share some code任何人都不应该真正看到但是有效并让我笑得开心吗?我欠你一个payne。希望我今晚能入睡。
答案 2 :(得分:2)
您可以使用css隐藏段落
答案 3 :(得分:2)
我采取了略微不同的方法。这有点hackish。这将使用空字符串替换“原始”字符串,因此仍然会渲染class = original的td,在编辑框上方留下间隙。
我更喜欢CSS解决方案(我必须使用'padding-top:5px;'才能使渲染正确)。
class Model(model.Model):
general_questions = models.TextField()
_hide = False
def __unicode__(self):
if _hide:
return ''
class ModelInline(admin.TabularInline):
model = Model
extra = 0
class ModelAdmin(admin.ModelAdmin):
inlines = [ModelInline, ]
def render_change_form(self, request, context, *args, **kwargs):
for formset in context['inline_admin_formsets']:
qs = formset.formset.queryset
for model_obj in qs:
model_obj._hide = True
return super(ModelAdmin, self).render_change_form(request, context, *args, **kwargs)
答案 4 :(得分:0)
如果有人想要隐藏StackedInline
上的标题,我使用Rick´s approach但是添加了这个css:
div.inline-related h3{
visibility: hidden;
height: 0;
}
答案 5 :(得分:0)
最简单的方法是在模板文件中添加一个css,Rick van der Zwet的答案是最好的