这是我的模型的(非常)简化版本:
实验室/ models.py
class Lab(Model):
professor = ForeignKey('authors.Author')
作者/ models.py
class Author(Model):
name = CharField(max_length=100)
在Django管理员中,当我添加或更新实验室时,会自动生成并显示包含每位教授的下拉列表。问题是这个列表很长,并没有按字母顺序排列。我希望教授下拉列表按“名称”字段按字母顺序排列。
我该怎么做?
答案 0 :(得分:17)
您可以为作者模型定义默认顺序:
class Author(Model):
name = CharField(max_length=100)
class Meta:
ordering = ('name',)
答案 1 :(得分:10)
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
列,在这种情况下,您可能必须使用其他列索引排序列。
答案 2 :(得分:0)
好吧,您可以在django admin中使用ordering
变量,也可以使用order_with_respect_to
underneath class Meta
。因此,首先需要将admin.py
文件添加到与models.py
文件相同的目录中。这就是您的admin.py
文件应该是这样的:
from django.contrib import admin
from models import Lab
class LabAdmin(admin.ModelAdmin):
fields = ('name',)
class Meta:
ordering = ['name'] # ['-name'] if you want the opposite ordering
admin.site.register(Lab, LabAdmin)
答案 3 :(得分:0)
当前执行此操作的方法(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