我正在使用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