【问题标题】:In Django Admin changelist view, how to make a foreign key column sort by a value other than primary key?在 Django Admin 更改列表视图中,如何使外键列按主键以外的值排序?
【发布时间】:2021-11-30 15:34:11
【问题描述】:

我有一个与自身存在多对一关系的表,便于树形结构:

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') 装饰器应用到它,但我觉得我错过了更多正确的方法,因为这肯定是一种常见的需求。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    你可以这样做:

    @admin.register(Medium)
    class MediumAdmin(admin.ModelAdmin):
        list_display = ('label', 'parent', 'parent_id')
        ordering = ('parent__label',)
    

    我就是这样做的,到目前为止它一直有效。

    【讨论】:

    • 除了单击列标题引起的排序外,这将始终应用排序。我想要的是能够点击父列并让所有行按父标签的值按字母顺序排序。
    猜你喜欢
    • 2012-02-18
    • 2017-04-06
    • 1970-01-01
    • 2018-10-27
    • 2016-11-12
    • 2012-07-05
    • 1970-01-01
    • 2011-03-05
    • 2017-02-04
    相关资源
    最近更新 更多