Is there an option in the django admin view for ordering of foreign key fields? i.e. I have a foreign key to a "School" model, which shows as a dropdown, sorted on pk-- I would like it to be sorted alphabetically.
Sure - you can...
ModelAdmin specific method: (the other methods are in my answer in the post linked to above)
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)
Examples for the other 3 non admin specific methods in my post linked above.
It seems to work to add an admin class to the model admin, with the ordering equal to the field you want the drop down list sorted by.
# in the admin.py file
class SchoolAdmin(admin.ModelAdmin):
ordering = ['school_name']
admin.site.register(SchoolModel, SchoolAdmin)
This works if you are willing to have an edit/add option next to drop down list.
The approved answer might override other changes on the queryset, so I prefer to use this because it's safer:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With