Django Admin:引用用户的ForeignKey和ManyToManyField关系的顺序

发布于 2021-01-29 19:02:10

我有一个利用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?谢谢!

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    一种方法是在管理中定义一个用于您的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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看