Django admin 对外键字段列表进行排序
在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种不特定于管理界面的方法示例: