Django admin 对外键字段列表进行排序

45 投票
4 回答
22413 浏览
提问于 2025-04-17 11:00

在Django的管理界面中,有没有办法对外键字段的顺序进行排序?比如,我有一个指向“学校”模型的外键,它在下拉框中显示,默认是按主键(pk)排序的——我想让它按字母顺序排序。

4 个回答

3

这个被认可的答案可能会覆盖查询集上的其他更改,所以我更喜欢使用这个方法,因为它更安全:

class StudentAdmin(admin.ModelAdmin):
    def get_field_queryset(self, db, db_field, request):
        queryset = super().get_field_queryset(db, db_field, request)
        if db_field.name == 'school':
            queryset = queryset.order_by('name')
        return queryset
8

看起来,如果你在模型管理中添加一个管理员类,并且设置排序方式为你想要的下拉列表排序的字段,这样是可以的。

# in the admin.py file

class SchoolAdmin(admin.ModelAdmin):
    ordering = ['school_name']

admin.site.register(SchoolModel, SchoolAdmin)

这样做是有效的,前提是你愿意在下拉列表旁边有一个编辑/添加的选项。

80

ModelAdmin 特定的排序方法通过 formfield_for_foreignkey:

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "school":
            kwargs["queryset"] = School.objects.order_by('name')
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

另外还有3种不特定于管理界面的方法示例:

撰写回答