如何在管理显示中隐藏
Unit_attribute object (3)
?
admin.py:
from django.contrib import admin
from core.models import Attribute, Unit
class UnitAttributeInline(admin.TabularInline):
model = Unit.attributes.through
@admin.register(Unit)
class UnitAdmin(admin.ModelAdmin):
inlines = [UnitAttributeInline]
models.py:
class Attribute(models.Model):
name = models.CharField(max_length=45)
class Unit(models.Model):
attributes = models.ManyToManyField(Attribute)
可以通过以下方法隐藏 Django Admin 中 TabularInline 的 M2M 对象名称:
-
自定义
UnitAttributeInline
类中的verbose_name
属性:
```python from django.contrib import admin from django.utils.translation import gettext_lazy as _
from core.models import Attribute, Unit
class UnitAttributeInline(admin.TabularInline): model = Unit.attributes.through verbose_name = '' # 设置为空字符串以隐藏对象名称 verbose_name_plural = _('Attributes') # 设置复数形式的名称
@admin.register(Unit) class UnitAdmin(admin.ModelAdmin): inlines = [UnitAttributeInline] ```
这将把
Unit_attribute object (3)
替换为
Attributes
,并且不再显示 "object" 字样。
- 使用自定义模板:
还可以创建一个自定义模板来完全控制内联显示的内容。
-
首先在的应用程序目录中创建一个名为
templates
的文件夹。 -
在
templates
文件夹中,创建一个名为admin/core/unit/inlines
的文件夹 (假设的应用程序名为core
,模型名为Unit
)。 -
在
inlines
文件夹中创建一个名为unitattributeinline.html
的文件。 -
将以下代码添加到
unitattributeinline.html
文件中:
html
{% for formset in inline_admin_formsets %}
{% for form in formset %}
{% for field in form.visible_fields %}
{{ field }}
{% endfor %}
{% endfor %}
{% endfor %}
-
最后,需要在
UnitAttributeInline
类中指定模板:
python
class UnitAttributeInline(admin.TabularInline):
model = Unit.attributes.through
template = 'admin/core/unit/inlines/unitattributeinline.html'
这将使用的自定义模板渲染内联,可以根据需要自定义显示的内容。
这两种方法都可以隐藏 M2M 对象名称,可以选择最适合需求的方法。
标签:python,django,django-admin From: 78804920