我正在使用Django-admin,并且有以下模型。它在管理员中显示为下拉列表。如何按字母顺序排序?而不是默认的用户ID?
user= models.ForeignKey(User)
我正在使用Django-admin,并且有以下模型。它在管理员中显示为下拉列表。如何按字母顺序排序?而不是默认的用户ID?
user= models.ForeignKey(User)
ForeignKey
模型的站点都存在可用性问题。class Meta:
ordering = ['field',]
class Admin:
ordering = ('field',)
raw_id_fields
来选择用户可能是有意义的。这样一来,用户将在自己的列表视图中显示,可以进行筛选和排序。class MyAdmin(ModelAdmin):
raw_id_fields = ['user']
为您的模型创建一个自定义表单并将其分配给您的ModelAdmin子类--您可以在表单的__init__
中覆盖ModelChoiceField的排序。例如:
# models.py
from django.db import models
from django.contrib.auth.models import User
class MyModel(models.Model):
user = models.ForeignKey(User)
# Other model fields ...
# forms.py
from django import forms
from django.contrib.auth.models import User
from myapp.models import MyModel
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.fields['user'].queryset = User.objects.order_by('first_name', 'last_name')
# admin.py
from django.contrib import admin
from myapp.models import MyModel
from myapp.forms import MyModelForm
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
# Other admin attributes ...
admin.site.register(MyModel, MyModelForm)
实际上,Django 提供了更好的方法来完成这个任务。甚至在他们的文档中都有说明 http://docs.djangoproject.com/en/1.2/topics/db/models/#proxy-models
您可以在相关的Admin类中轻松排序admin.py
。
假设您的Admin类如下:
@admin.register(UserStuff)
class UserStuffAdmin(admin.ModelAdmin):
list_display = ['user', 'other', 'fields']
ordering = ['user']
这行代码 ordering = ['user']
将按照 user
字段排序。根据字段的字母或数字顺序进行排序。使用字段的正常排序方法。您还可以执行 ordering = ['-user']
,它将按降序排序。
来源:https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.ordering