python - 在 Django Admin 更改列表视图中,如何使外键列按主键以外的值排序?
问题描述
我有一个与自身具有多对一关系的表,便于树形结构:
class Medium(models.Model):
label = models.CharField(max_length=30)
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True)
def __str__(self):
return self.label
在 Django Admin 更改列表视图中,我想显示第二列,其中包含父媒体的上下文标签 - 我希望该列能够根据标签进行排序。但是,如果我使用list_display
添加字段“父”,则该列按主键排序。
示范:
@admin.register(Medium)
class MediumAdmin(admin.ModelAdmin):
list_display = ('label', 'parent', 'parent_id')
完成此任务的正确或最优雅的方法是什么?我已经看到建议通过向 MediumAdmin 添加一个返回父标签的自定义方法,然后将 @admin.display(ordering='parent__label') 装饰器应用到它,但我觉得我错过了更多正确的方法,因为这肯定是一个普遍的需求。
解决方案
你可以这样做:
@admin.register(Medium)
class MediumAdmin(admin.ModelAdmin):
list_display = ('label', 'parent', 'parent_id')
ordering = ('parent__label',)
这就是我这样做的方式,到目前为止它一直有效。
推荐阅读
- istio - Istio 网格因“重复条目”错误而中断
- javascript - 如何使用角度foreach返回值?
- mysql - 如何在 SQL 查询中连接同一表中的列以将它们显示为一个?
- sql - 如何通过数据库查询直接访问产品名称、产品价格和永久链接和产品照片列
- html - CSS Navbar 子菜单如何居中?
- wordpress - Wordpress 查询仅返回 1 个结果,但所有结果都带有 nonpaging = true
- image - 为什么 imfindcircles 在尝试在具有密集圆圈的图像中查找圆圈时不起作用?
- azure-devops - 构建的工件不下载
- ios - React Native 应用程序无法将 @1x、@2x 或 @3x 图像加载到正确的屏幕密度
- javascript - 有哪些使用 reduce() 的好场景?