Django Admin:在选择列表中订购商品

时间:2013-08-03 10:38:20

标签: django

我有2个型号:产品和类别。 当我在管理界面中创建新产品时,我必须在列表中选择一个类别。但是我想按照名单订购这些类别。在互联网上搜索后,我还没找到解决方案。

有办法吗?

1 个答案:

答案 0 :(得分:5)

您可以在模型定义的元类中设置默认排序:

class Category(models.Model):
    name = models.CharField(...)
    [ other fields ... ]
    class Meta:
        ordering = ['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 referencing User