python - Django admin 只显示一次 M2M 元素
问题描述
我有一个“培训”模型,其中包含一个“培训师”模型的 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'
解决方案
通过反复试验,我终于找到了导致问题的原因:
在 admin.py 中,这一行是问题所在
ordering = ('name', 'trainer',)
通过删除“trainer”的排序,Django 只显示一次训练。
ordering = ('name',)
推荐阅读
- database - 在单个文件中实现数据库
- swift - curl 到 URLRequest - 一个工作,一个不工作
- angular - Owl Carousel Slider 在 Angular 组件中不工作,但在 Index.html 中工作
- firebase - 使用实时数据库优化聊天应用程序中的存储和带宽使用
- cplex - 错误的 CPLEX 优化结果
- c++ - 如何安装相关的 C++ 库以避免链接器命令失败?
- javascript - 从反应输入表单获取数据时遇到问题
- jquery - 在为 React 项目工作一段时间后,我收到所有“npm install”命令的以下错误
- asp.net-mvc - 如何在 StartUp.Auth.cs 中使用 Autofac 进行依赖注入
- javascript - 关闭选项卡时如何发出socketIO事件