我正在使用django-admin,我有一个模型如下。它显示为管理员中的下拉列表。我怎样才能按字母顺序排列呢?而不是默认的用户ID?django管理员按字母顺序排列
user= models.ForeignKey(User)
我正在使用django-admin,我有一个模型如下。它显示为管理员中的下拉列表。我怎样才能按字母顺序排列呢?而不是默认的用户ID?django管理员按字母顺序排列
user= models.ForeignKey(User)
根据Django核心开发人员的说法,您所描述的问题是一个功能,而不是一个错误。在开始时,Django按字母顺序排列User
字段,但这导致真的大型网站(即当时的Pownce)的性能问题,成千上万的用户。但是,不要问几个巨大的 Django网站实施一个解决方法,排序只是removed,现在每个网站的模型与ForeignKey
到User
有可用性的问题。
大约一年前,我在Django问题跟踪器上发布了ugly workaround。 Daniel Roseman在另一个Stackoverflow question中发布了类似的(和更好的)更好的解决方案。
为您的模型创建一个自定义表单并将其分配给您的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
为什么不在级别模型?
class Meta:
ordering = ['field',]
或者在管理员级别?
class Admin:
ordering = ('field',)
只是因为它是django.contrib,所以你不应该这样改变它。你可以但是这不是一个好主意来修改单个项目的库。 – Jerzyk 2011-03-22 12:10:31
对不起?我不是在谈论修改任何图书馆。正如文档中所述,我正在考虑使用代理模型:“标准的用户模型没有定义它的排序(故意;排序是昂贵的,我们不想在我们获取用户时一直这样做)。当你使用代理时,可能希望通过用户名属性进行定期...“ – inigomedina 2011-03-23 15:26:12
但是,然后 - 你将在不同的命名空间中使用不同的模型。所以你的外键将是一个不同的模型。 – Jerzyk 2011-03-23 15:52:42
如果你不仅5,但用户的像样的数目,它可能是有意义的更改管理员使用raw_id_fields
用户选择。这样,用户将显示在他们自己的列表视图中,允许过滤和排序。
class MyAdmin(ModelAdmin):
raw_id_fields = ['user']
做你知道类型的对象“CollaboratorForm”有没有属性“域” – Grey 2010-08-17 21:13:23
感谢我得到了它,我不应该使用注册 – Grey 2010-08-17 21:41:26