Django管理者仅显示M2M元素

2024-03-28 09:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个“训练”模型,包含了许多领域到一个“教练”模型。你知道吗

让我们以“training 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
    )

还有我的管理员.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'

Tags: name模型fieldsgetmodelmodelstraininglength
1条回答
网友
1楼 · 发布于 2024-03-28 09:45:56

通过反复试验,我终于找到了问题的根源:

在管理员.py,这条线就是问题所在

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

通过删除“trainer”的命令,Django只显示每个培训一次。你知道吗

ordering = ('name',)

相关问题 更多 >