我有一个“培训”模型,其中包含一个到“培训师”模型的ManyToManyField。
让我们以"training 1“为例,它有3个训练者"A”、"B“和"C”。而"training 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'
发布于 2018-08-13 22:03:02
经过反复试验,我终于找到了导致问题的原因:
在admin.py中,这一行就是问题所在
ordering = ('name', 'trainer',)
Django删除了“training By”的排序,每个训练只显示一次。
ordering = ('name',)
https://stackoverflow.com/questions/51802848
复制相似问题