4

製品とカテゴリの 2 つのモデルがあります。管理画面で新しい製品を作成するとき、リストからカテゴリを選択する必要があります。しかし、これらのカテゴリをこのリストの名前で並べ替えたいと思います。インターネットで検索した後、まだ解決策が見つかりませんでした。

それを行う方法はありますか?

4

1 に答える 1

7

モデル定義のメタ クラスでデフォルトの順序を設定できます。

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

これにより、 Category に対するすべてのクエリは、名前フィールドでデフォルトで並べ替えられます。不要な順序付けがアプリの他のビュー/場所でのパフォーマンスに影響を与える場合、これは不利になる可能性があります。それとは別に、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 と ManyToManyField 関係を参照するユーザー

于 2013-08-03T10:48:04.623 に答える