Django Admin:引用用户的ForeignKey和ManyToManyField关系的顺序
我有一个利用DjangoUserProfile
扩展内置DjangoUser
模型的应用程序。看起来有点像:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
# Local Stuff
image_url_s = models.CharField(max_length=128, blank=True)
image_url_m = models.CharField(max_length=128, blank=True)
# Admin
class Admin: pass
我在模型中添加了一个新类:
class Team(models.Model):
name = models.CharField(max_length=128)
manager = models.ForeignKey(User, related_name='manager')
members = models.ManyToManyField(User, blank=True)
并注册到管理员:
class TeamAdmin(admin.ModelAdmin):
list_display = ('name', 'manager')
admin.site.register(Team, TeamAdmin)
las,在管理界面中,当我从下拉框中选择经理时,或通过多选字段设置团队成员时,它们将按用户数字ID进行排序。对于我的一生,我不知道该如何进行排序。
我有一个类似的课程:
class Meta:
ordering = ['name']
效果很好!但是我不“拥有”该User
课程,当我尝试使用以下技巧时UserAdmin
:
class Meta:
ordering = ['username']
我得到:
django.core.management.base.CommandError: One or more models did not
validate:
events.userprofile: "ordering" refers to "username", a field that
doesn't exist.
user.username
也不起作用。我可以指定,例如image_url_s
是否想要。。。如何告诉管理员对用户列表进行排序username
?谢谢!
-
一种方法是在管理中定义一个用于您的Team模型的自定义表单,并覆盖该
manager
字段以使用具有正确顺序的queryset:from django import forms class TeamForm(forms.ModelForm): manager = forms.ModelChoiceField(queryset=User.objects.order_by('username')) class Meta: model = Team class TeamAdmin(admin.ModelAdmin): list_display = ('name', 'manager') form = TeamForm