如何在Django管理中按字母顺序排列下拉列表?

2024-09-28 23:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的模型的(非常)简化版本:

实验室/模型.py

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

作者/模型.py

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

在Django管理员中,当我添加或更新实验室时,会自动生成并显示包含每个教授的下拉列表。问题是这个列表很长,而且不是按字母顺序排列的。我希望“教授”下拉列表按“姓名”字段的字母顺序排列。

我该怎么做?


Tags: py模型版本列表model字母lab作者
3条回答

ModelAdmin specific ordering via formfield_for_foreignkey

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列,在这种情况下,您可能需要将ordering列与其他列一起索引。

目前的做法(2019年1月):

在admin.py文件中:

class AuthorAdmin(admin.ModelAdmin):
    ordering = ['name']

然后注册:

admin.site.register(Author, AuthorAdmin)

如文件所述: https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.ordering

可以为作者模型定义默认顺序:

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

    class Meta:
        ordering = ('name',)

相关问题 更多 >