在admin.TabularInline

时间:2016-05-22 17:45:32

标签: python django django-admin many-to-many

管理员中的表格内联如下所示:

tabularinline

如何摆脱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']

2 个答案:

答案 0 :(得分:2)

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

幸运的是,您可以通过直接在verbose_name内设置verbose_name_pluralInlineModelAdmin来覆盖它,即

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"那里但我不会说法语)

管理员在Django 1.10中显示如下:

django tabular inline

在一个小小的音符上,你永远不需要在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__

答案 1 :(得分:1)

在Django 3中,内联管理的每个对象的标题(原始文章中的DateDeCotisation_adherents object)来自模型的__str__方法。另外,由于内联管理类的extra属性,可能会出现额外的行。 admin.InlineModelAdmin(堆积式和表格式内联的父级)中的默认设置为extra = 3。在您的嵌入式管理员中,设置extra = 0。随时查看django.contrib.admin.options.py中的所有选项。