【问题标题】:Django Admin : ordering items in a selection list [closed]Django Admin:在选择列表中订购项目[关闭]
【发布时间】:2013-08-03 10:38:19
【问题描述】:

我有 2 个模型:产品和类别。 当我在管理界面中创建新产品时,我必须在列表中选择一个类别。但我想按我的列表的名称对这些类别进行排序。在网上搜索了一下,还是没找到解决办法。

有没有办法做到这一点?

【问题讨论】:

  • 为什么投反对票?我认为这是一个合理的问题......

标签: django


【解决方案1】:

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

class Category(models.Model):
    name = models.CharField(...)
    [ other fields ... ]
    class Meta:
        ordering = ['name']

这样,any 对 Category 的查询将默认按 name 字段排序。如果不必要的排序会影响应用程序其他视图/位置的性能,这可能是一个缺点。除此之外,您还可以在 admins.py 中修改排序。其基础看起来像这样。您需要将此 sn-p 调整到您的特定应用:

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 question 的接受答案增加了另一个解决方案: Django Admin: Ordering of ForeignKey and ManyToManyField relations referencing User

【讨论】:

  • 有效!非常感谢 !也许我不明白 Meta 是如何工作的。现在我对此有了更多了解:) 非常感谢!
  • 不客气 :) 如果你喜欢,别忘了接受答案。
猜你喜欢
  • 2017-06-24
  • 1970-01-01
  • 2010-10-15
  • 2010-11-28
  • 2012-11-15
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2018-03-31
相关资源
最近更新 更多