製品とカテゴリの 2 つのモデルがあります。管理画面で新しい製品を作成するとき、リストからカテゴリを選択する必要があります。しかし、これらのカテゴリをこのリストの名前で並べ替えたいと思います。インターネットで検索した後、まだ解決策が見つかりませんでした。
それを行う方法はありますか?
製品とカテゴリの 2 つのモデルがあります。管理画面で新しい製品を作成するとき、リストからカテゴリを選択する必要があります。しかし、これらのカテゴリをこのリストの名前で並べ替えたいと思います。インターネットで検索した後、まだ解決策が見つかりませんでした。
それを行う方法はありますか?
モデル定義のメタ クラスでデフォルトの順序を設定できます。
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 関係を参照するユーザー