Django管理员仅显示一次M2M元素

时间:2018-08-11 19:02:12

标签: python django manytomanyfield

我有一个包含“ ManyToManyField”的“培训”模型到“培训者”模型。

让我们以“培训1”为例,其中有3位培训师“ A”,“ B”和“ C”。而“培训2”只有一名培训师“ A”。

在我的管理面板中,当我想查看所有培训时,它显示出类似以下内容:

“培训1”:“ A”

“培训1”:“ B”

“培训1”:“ C”

“培训2”:“ A”

因为我已经进行了内联以便从一个实体中获取所有培训师,所以我希望它仅显示每个培训中的一个,所以类似:

“培训1”:“ A”

“培训2”:“ A”

我的模型如下:

class Training(models.Model):
    name = models.CharField(
        max_length=60
    )

    trainer = models.ManyToManyField(
        Trainer,
        through='Training_trainer'
    )


class Trainer(models.Model):
    first_name = models.CharField(
        max_length=60
    )

    last_name = models.CharField(
        max_length=60
    )

我的admin.py看起来像这样:

class Training_trainerInline(admin.TabularInline):
    model = Training.trainer.through
    extra = 3


class TrainingAdmin(admin.ModelAdmin):
    list_display = ('name', 'get_trainer')
    list_filter = ('trainer',)
    fieldsets = (
        (None, {'fields': ('name',)}),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('name', 'trainer')}
         ),
    )

    search_fields = ('name', 'trainer',)
    ordering = ('name', 'trainer',)

    inlines = [Training_trainerInline, ]

    def get_trainer(self, obj):
        return "\n".join([str(p.trainer) for p in Training_trainer.objects.filter(training=obj)[:1]])

    get_trainer.short_description = 'Trainer'

1 个答案:

答案 0 :(得分:1)

通过反复试验,我终于找到了导致问题的原因:

在admin.py中,这是问题所在

ordering = ('name', 'trainer',)

通过删除“培训师”的排序,Django仅将每个培训展示一次。

ordering = ('name',)