首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django admin只显示一次M2M元素

Django admin只显示一次M2M元素
EN

Stack Overflow用户
提问于 2018-08-12 03:02:12
回答 1查看 49关注 0票数 0

我有一个“培训”模型,其中包含一个到“培训师”模型的ManyToManyField。

让我们以"training 1“为例,它有3个训练者"A”、"B“和"C”。而"training 2“只有一个训练者"A”。

在我的管理面板中,当我想要查看所有培训时,它会显示如下内容:

“培训1”:"A“

“培训1”:"B“

“培训1”:"C“

“培训2”:"A“

因为我已经做了一个内联,以便从一个实体获得所有的训练者,所以我希望它只显示每个训练中的一个,所以类似于:

“培训1”:"A“

“培训2”:"A“

我的模型是这样的:

代码语言:javascript
运行
复制
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是这样的:

代码语言:javascript
运行
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-13 22:03:02

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

在admin.py中,这一行就是问题所在

代码语言:javascript
运行
复制
ordering = ('name', 'trainer',)

Django删除了“training By”的排序,每个训练只显示一次。

代码语言:javascript
运行
复制
ordering = ('name',)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51802848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档