django管理员按字母顺序排列

时间:2010-08-16 20:33:25

标签: django django-models django-admin

我正在使用django-admin,我有一个模型如下。它显示为管理员中的下拉列表。我怎么能按字母顺序排序呢?而不是默认用户ID?

user= models.ForeignKey(User)

6 个答案:

答案 0 :(得分:3)

根据Django核心开发人员的说法,你描述的问题是一个功能,而不是一个bug。在开始时,Django按字母顺序排序User字段,但这导致真正大型网站(当时为Pownce)的性能问题,成千上万的用户。但是,不是要求少数巨大的 Django网站实施变通方法,而是排序只是removed,现在每个网站都有ForeignKey到{{1}的模型有可用性问题。

大约一年前,我在Django问题跟踪器上发布了ugly workaround。 Daniel Roseman在另一个Stackoverflow question发布了一个类似的(和更好的恕我直言)解决方案。

答案 1 :(得分:0)

为模型创建自定义表单并将其分配给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)

答案 2 :(得分:0)

实际上,Django提供了更好的方法。它甚至在他们的文档中 http://docs.djangoproject.com/en/1.2/topics/db/models/#proxy-models

答案 3 :(得分:0)

为什么不在关卡模型?

class Meta:
    ordering = ['field',]

或者在管理员级别?

class Admin:
    ordering       = ('field',)

答案 4 :(得分:0)

如果您不仅拥有5个用户,而且拥有相当数量的用户,则可以将管理员更改为使用raw_id_fields进行用户选择。这样,用户将显示在他们自己的列表视图中,允许进行过滤和排序。

class MyAdmin(ModelAdmin):
    raw_id_fields = ['user']

答案 5 :(得分:0)

您可以轻松地在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