在 admin.TabularInline 中删除或编辑对象名称

Posted

技术标签:

【中文标题】在 admin.TabularInline 中删除或编辑对象名称【英文标题】:Remove or edit object name in admin.TabularInline 【发布时间】:2016-09-19 13:02:02 【问题描述】:

我在管理中的表格内联看起来像这样:

如何摆脱DateDeCotisation_adherents object 短语?

加分,为什么底部有三个空行?

admin.py

class DatesDeCotisationInline(admin.TabularInline):
    model = DateDeCotisation.adherents.through
    readonly_fields = ['datedecotisation']
    can_delete = False

models.py

class DateDeCotisation(models.Model):

    date = models.DateTimeField()
    adherents = models.ManyToManyField(Adherent, related_name='adherents_du_jour')

    def __str__(self): return self.date.strftime('%Y-%m-%d')

    class Meta:
        verbose_name = "date de cotisation".encode('utf-8')
        verbose_name_plural = "dates de cotisation".encode('utf-8')
        ordering = ['-date']

【问题讨论】:

关于底部额外的三个字段,只需在我的 TabularInline 类中设置“extra = 0”即可清除它们。 【参考方案1】:

该内联应该从模型according to the documentation 的内部Meta 类中获取verbose_nameverbose_name_plural。然而,我只是将您的代码转储到最新的 django 中,但实际上并没有(或者,也许只有当您使用 .through 时它才不会这样做)。

幸运的是,您始终可以通过在InlineModelAdmin 中直接设置verbose_nameverbose_name_plural 来覆盖它,即

class DatesDeCotisationInline(admin.TabularInline):
    model = DateDeCotisation.adherents.through
    readonly_fields = ['datedecotisation']
    can_delete = False
    verbose_name = 'date de cotisation for adherent'
    verbose_name_plural = 'date de cotisation for adherent'

class AdherentAdmin(admin.ModelAdmin):
    inlines = [DatesDeCotisationInline]

admin.site.register(models.Adherent, AdherentAdmin)

(对不起,这里的“for”,但我不会说法语)

admin 在 Django 1.10 中显示如下:


请注意,您永远不需要在 python 3 中使用 .encode('utf-8')。默认情况下,它的字符串是 UTF-8。

class Meta:
    verbose_name = "date de cotisation".encode('utf-8')
    verbose_name_plural = "dates de cotisation".encode('utf-8')

(我假设您使用的是 python 3,因为您使用的是 __str__

【讨论】:

感谢您的回复!我会尝试一下。有没有办法完全摆脱这个短语?法语中的“for”应该是“pour”! 似乎没有成功,即使在我的管理员中设置了 verbose_name 及其复数后仍然得到相同的结果:s 我使用最新的 django 版本(撰写本文时为 1.10)来执行我的测试。根据文档,InlineModelAdmin 中的字段已经很老了,所以我怀疑您可能正在注册表格内联的方式。我已经用我执行admin.site.register 的方式更新了我的答案。【参考方案2】:

在 Django 3 中,inline admin 的每个对象的标题(原帖中的DateDeCotisation_adherents object)来自模型的__str__ 方法。额外的行也可能是因为内联管理类的extra 属性。 admin.InlineModelAdmin(Stacked 和 Tabular inline 的父级)中的默认设置为 extra = 3。在您的内联管理员中,设置extra = 0。随意查看django.contrib.admin.options.py 中的所有选项。

【讨论】:

以上是关于在 admin.TabularInline 中删除或编辑对象名称的主要内容,如果未能解决你的问题,请参考以下文章

我的 admin.TabularInline 类返回异常:对象没有属性 'urls'

我如何在管理员之外复制 admin.TabularInline(在用户端?)

与 admin.TabularInline 有外部关系的管理面板的 Django Inline

Django-Admin TabularInline 在保存前修改内联项属性

django admin TabularInline raw_id_fields 添加查询 搜索小图标显示

一起使用Django SimpleHistory和TabularInline