I have 2 models : Product and Category. When I create a new product in my admin interface, I have to select a Category in a list. But I'd like to order these Categories by name this my list. After searching for it on the internet, i didnt find the solution yet.
Is there a way to do that ?
You could set a default ordering in the meta class of your model definition:
class Category(models.Model):
name = models.CharField(...)
[ other fields ... ]
class Meta:
ordering = ['name']
By that, any query on Category will be ordered by default on the name field. This may be a disadvantage if unnecessary ordering affects the performance in other views/locations of your app. Apart from that, you may also modify the ordering inside your admins.py. The basics for that look like this. You'll need to adapt this snippet to your specific app:
from django import forms
from django.contrib import admin
from my_project.my_app.models import Category, Product
class ProductAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(ProductAdmin, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name == 'category':
field.queryset = Category.objects.all().order_by('name')
return field
list_display = ('...', '...', ...)
[ other admin definitions ... ]
admin.site.register(Product, ProductAdmin)
The accepted answer on this SO question adds another solution: Django Admin: Ordering of ForeignKey and ManyToManyField relations referencing User
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