这是我的模型的(非常)简化版本:
实验室/ models.py
class Lab(Model):
professor = ForeignKey('authors.Author')
Run Code Online (Sandbox Code Playgroud)
作者/ models.py
class Author(Model):
name = CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
在Django管理员中,当我添加或更新实验室时,会自动生成并显示包含每位教授的下拉列表.问题是这个列表很长,并没有按字母顺序排列.我希望教授下拉列表按"名称"字段按字母顺序排序.
我怎样才能做到这一点?
ipe*_*kiy 16
您可以为Author模型定义默认顺序:
class Author(Model):
name = CharField(max_length=100)
class Meta:
ordering = ('name',)
Run Code Online (Sandbox Code Playgroud)
rav*_*404 12
通过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)
Run Code Online (Sandbox Code Playgroud)
注意恕我直言,最好不要设置顺序,model因为管理页面的顺序需要与模型分离.
此外,在模型上触发的所有查询都将使用该order_by列,在这种情况下,您可能必须使用其他列索引排序列.
当前执行此操作的方法(2019 年 1 月):
在您的 admin.py 文件中:
class AuthorAdmin(admin.ModelAdmin):
ordering = ['name']
Run Code Online (Sandbox Code Playgroud)
然后注册它:
admin.site.register(Author, AuthorAdmin)
Run Code Online (Sandbox Code Playgroud)
如文档中所述:https : //docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.ordering