django admin排序外键字段列表

时间:2012-01-24 19:30:28

标签: django django-admin

django管理视图中是否有选项可用于外键字段的排序?即我有一个“学校”模型的外键,它显示为下拉列表,按照pk排序 - 我希望它按字母顺序排序。

3 个答案:

答案 0 :(得分:66)

当然 - 你可以......

ModelAdmin具体方法:(其他方法在我上面链接到的帖子中回答)

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(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

上面链接的帖子中其他3个非管理员特定方法的示例。

答案 1 :(得分:3)

向模型admin添加一个admin类似乎是可行的,其顺序等于要对下拉列表进行排序的字段。

# in the admin.py file

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

admin.site.register(SchoolModel, SchoolAdmin)

如果您希望下拉列表旁边有一个编辑/添加选项,则此方法有效。

答案 2 :(得分:1)

批准的答案可能会覆盖查询集上的其他更改,所以我更喜欢使用它,因为它更安全:

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