在 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_name
和verbose_name_plural
。然而,我只是将您的代码转储到最新的 django 中,但实际上并没有(或者,也许只有当您使用 .through
时它才不会这样做)。
幸运的是,您始终可以通过在InlineModelAdmin
中直接设置verbose_name
和verbose_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 在保存前修改内联项属性