我有 2 个模型:产品和类别。当我在管理界面中创建新产品时,我必须在列表中选择一个类别。但我想按我的列表的名称对这些类别进行排序。在互联网上搜索后,我还没有找到解决方案。
有没有办法做到这一点 ?
我有 2 个模型:产品和类别。当我在管理界面中创建新产品时,我必须在列表中选择一个类别。但我想按我的列表的名称对这些类别进行排序。在互联网上搜索后,我还没有找到解决方案。
有没有办法做到这一点 ?
您可以在模型定义的元类中设置默认排序:
class Category(models.Model):
name = models.CharField(...)
[ other fields ... ]
class Meta:
ordering = ['name']
这样,任何关于 Category 的查询都将默认在 name 字段上排序。如果不必要的排序会影响应用程序其他视图/位置的性能,这可能是一个缺点。除此之外,您还可以在 admins.py 中修改排序。其基础看起来像这样。您需要将此代码段改编为您的特定应用程序:
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)
在这个 SO 问题上接受的答案增加了另一个解决方案: Django Admin: Ordering of ForeignKey and ManyToManyField Relations references User