django 管理视图中是否有用于外键字段排序的选项?即我有一个“School”模型的外键,它显示为下拉列表,按 pk 排序——我希望它按字母顺序排序。
当然 - 你可以...
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().formfield_for_foreignkey(db_field, request, **kwargs)
上面链接的我的帖子中其他 3 个非管理特定方法的示例。 [1]:ModelForm ManytoManyField DJANGO 中的排序选择 [2]:ModelForm ManytoManyField DJANGO 中的排序选择 [3]:ModelForm ManytoManyField DJANGO 中的排序选择 [4]:https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey
向模型管理添加一个管理类似乎可行,其顺序等于您希望下拉列表排序的字段。
# in the admin.py file
class SchoolAdmin(admin.ModelAdmin):
ordering = ['school_name']
admin.site.register(SchoolModel, SchoolAdmin)
如果您愿意在下拉列表旁边有一个编辑/添加选项,则此方法有效。
批准的答案可能会覆盖查询集上的其他更改,所以我更喜欢使用它,因为它更安全:
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
您可以重写 formfield_for_foreignkey() 来更改顺序,如下所示:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == "school":
formfield.queryset = School.objects.order_by('name')
return formfield