当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《DjangoAdmin:在选择列表中订购商品》经验,为你挑选了1个好方法。

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

有没有办法做到这一点 ?



1> Simon Steinb..:

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

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:参考User的ForeignKey和ManyToManyField关系的顺序

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有