Django-用户管理-将组添加到列表显示

Django-用户管理-将组添加到列表显示,django,django-admin,django-authentication,Django,Django Admin,Django Authentication,正如我们所知,许多关系无法在列表显示中列出。有什么办法可以让它像group1、group2等一样吗?我不理解您的示例(group1、group2),但您当然可以在changelist视图中将任何函数用作列,这意味着您很可能可以做您想显示的事情 例如: class MyModelAdmin(admin.ModelAdmin): list_display = ('foo', 'bar') def foo(self): return "This column is F

正如我们所知,许多关系无法在列表显示中列出。有什么办法可以让它像group1、group2等一样吗?

我不理解您的示例(group1、group2),但您当然可以在changelist视图中将任何函数用作列,这意味着您很可能可以做您想显示的事情

例如:

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('foo', 'bar')

    def foo(self):
        return "This column is Foo"

    def bar(self, obj):
        try:
            return obj.m2m.latest('id')
        except obj.DoesNotExist:
            return "n/a"


    # there's a few more things you can do to customize this output
    def bar(self, obj):
        return '<span style="color:red;">By the way, I am red.</span>'

    bar.short_description = "My New Column Label"
    bar.allow_tags = True
类MyModelAdmin(admin.ModelAdmin):
列表显示=('foo','bar')
def foo(self):
return“此列为Foo”
def条(自身、obj):
尝试:
返回obj.m2m.latest('id')
除obj.DoesNotExist外:
返回“不适用”
#您还可以做一些事情来定制此输出
def条(自身、obj):
return“顺便说一句,我是红色的。”
bar.short\u description=“我的新列标签”
bar.allow_tags=True

奖金:将组显示为用户筛选器:

class SBUserAdmin(UserAdmin):
    list_filter = UserAdmin.list_filter + ('groups__name',)
    list_display = ('username','custom_group', )

    def custom_group(self, obj):
        """
        get group, separate by comma, and display empty string if user has no group
        """
        return ','.join([g.name for g in obj.groups.all()]) if obj.groups.count() else ''

admin.site.unregister(User)
admin.site.register(User, SBUserAdmin)

萨维特!谢谢你这个巧妙的解决方案。我应该在这里添加另一个小技巧,使其更加用户友好:
custom\u group.admin\u order\u field='groups'
。这允许对该列进行排序: