28

これが私のモデルの(非常に)単純化されたバージョンです:

研究所/models.py

class Lab(Model):
    professor = ForeignKey('authors.Author')

作者/models.py

class Author(Model):
    name = CharField(max_length=100)

Django admin では、ラボを追加または更新すると、各教授を含むドロップダウン リストが自動的に生成されて表示されます。問題は、このリストが非常に長く、アルファベット順になっていないことです。教授のドロップダウン リストを「名前」フィールドのアルファベット順に並べたい。

どうやってやるの?

4

4 に答える 4

21

formfield_for_foreignkey による ModelAdmin 固有の順序付け

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "author":
            kwargs["queryset"] = Author.objects.filter(anyfilters=anyfilters).order_by('name')
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

model管理ページの順序をモデルから切り離す必要があるため、順序を設定しない方がよいことに注意してください。

また、モデルで起動されるすべてのクエリは列を使用しorder_byます。その場合、順序付け列を他の列でインデックス化する必要がある場合があります。

于 2015-11-02T10:01:40.080 に答える