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