Django admin 只显示一次 M2M 元素
Django admin only show M2M elements once
我有一个包含 ManyToManyField 到 "trainer" 模型的 "training" 模型。
让我们举个例子 "training 1" 有 3 个训练师 "A" "B" 和 "C"。而"training 2"只有一名训练师"A"。
当我想查看所有培训时,在我的管理面板中,它显示如下内容:
"training 1" : "A"
"training 1" : "B"
"training 1" : "C"
"training 2" : "A"
因为我已经进行了内联以便从一个实体获取所有培训师,所以我希望它只显示每个培训中的一个,所以类似于:
"training 1" : "A"
"training 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'
反复试验,终于找到问题所在:
在 admin.py 中,这一行是问题所在
ordering = ('name', 'trainer',)
通过删除 'trainer' 的排序,Django 只显示一次训练。
ordering = ('name',)
我有一个包含 ManyToManyField 到 "trainer" 模型的 "training" 模型。
让我们举个例子 "training 1" 有 3 个训练师 "A" "B" 和 "C"。而"training 2"只有一名训练师"A"。
当我想查看所有培训时,在我的管理面板中,它显示如下内容:
"training 1" : "A"
"training 1" : "B"
"training 1" : "C"
"training 2" : "A"
因为我已经进行了内联以便从一个实体获取所有培训师,所以我希望它只显示每个培训中的一个,所以类似于:
"training 1" : "A"
"training 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'
反复试验,终于找到问题所在:
在 admin.py 中,这一行是问题所在
ordering = ('name', 'trainer',)
通过删除 'trainer' 的排序,Django 只显示一次训练。
ordering = ('name',)