Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django字母管理命令_Django_Django Models_Django Admin - Fatal编程技术网

django字母管理命令

django字母管理命令,django,django-models,django-admin,Django,Django Models,Django Admin,我使用的是django管理员,我有一个如下的模型。它在管理中显示为下拉列表。我怎样才能按字母表订购?而不是默认的用户ID user= models.ForeignKey(User) 根据Django core开发人员的说法,您描述的问题是一个特性,而不是bug。起初,Django按字母顺序排列User字段,但这导致了拥有数十万用户的大型站点(即当时)的性能问题。但是,与要求少数大型Django网站实施解决方案不同,订购过程非常简单,现在每个网站都有一个可用性问题,即带有ForeignKeyto

我使用的是django管理员,我有一个如下的模型。它在管理中显示为下拉列表。我怎样才能按字母表订购?而不是默认的用户ID

user= models.ForeignKey(User)

根据Django core开发人员的说法,您描述的问题是一个特性,而不是bug。起初,Django按字母顺序排列
User
字段,但这导致了拥有数十万用户的大型站点(即当时)的性能问题。但是,与要求少数大型Django网站实施解决方案不同,订购过程非常简单,现在每个网站都有一个可用性问题,即带有
ForeignKey
to
User
的模型


大约一年前,我在Django问题追踪网站上发布了一篇文章。Daniel Roseman在另一个网站上发布了一个类似(而且更好)的解决方案。

为您的模型创建一个自定义表单,并将其分配给您的ModelAdmin子类——您可以覆盖表单的
\uuuu init\uuuu
中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提供了更好的方法。甚至在他们的文档中

为什么不在模型级别

class Meta:
    ordering = ['field',]
还是在管理层

class Admin:
    ordering       = ('field',)

如果您不仅有5个用户,而且有相当数量的用户,那么将管理员更改为使用
raw\u id\u字段
进行用户选择可能是有意义的。这样,用户将显示在他们自己的列表视图中,允许进行筛选和排序

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

您可以在
admin.py
相关的管理类中轻松排序

假设您的管理类如下所示:

@admin.register(UserStuff)
class UserStuffAdmin(admin.ModelAdmin):
    list_display = ['user', 'other', 'fields']
    ordering = ['user']
ordering=['user']
将通过
user
字段进行排序。根据字段的不同,按字母或数字顺序排列。使用字段的正常排序方法。您还可以执行
排序=['-user']
,它将按降序排序


来源:

你知道为什么我总是得到“类型对象‘CollaboratorForm’没有属性‘fields’”谢谢你知道类型对象‘CollaboratorForm’没有属性‘fields’只是因为它是django.contrib,所以你不应该这样更改它。可以,但这不是为单个项目修改库的好主意。对不起?我不是说修改任何库。我在考虑文档中所述的代理模型:“标准用户模型没有定义排序(故意;排序很昂贵,我们不想在获取用户时一直这样做)。在使用代理时,您可能希望定期按用户名属性排序…”但是,然后-您将在不同的名称空间中拥有不同的模型。因此,您的外键将指向不同的模型。是的,指向代理模型。够清楚了吗?不管怎么说,与你的第一句话无关,