在顶部使用特定组对 django 用户进行排序

Sort django users with specific groups on the top

应用程序的所有用户都映射到至少一个组。这是可用组的列表:

>>>Group.objects.all()
<QuerySet [<Group: superuser>, <Group: maintainer>, <Group: admin>, <Group: executive>, <Group: client>, <Group: other>]> 

当我使用 .all() 呈现查询集中的所有用户时,我想用特定的自定义顺序对它们进行排序,这样,所有 Superusers 都应该在顶部,然后 Admins,然后是 Executives,然后是下面列表中的其余用户。

custom_sort_order = ['superuser', 'admin', 'executive', 'client', 'maintainer', 'other']

想知道,如何在 queryset 上使用 sorted() 函数:

class UserList(generic.ListView):
    model = User
    queryset = User.objects.all()
    template_name = 'users/users.html' 
    paginate_by = 10

您可以通过查看 custom_sort_order:

user group name 进行排序
def get_queryset(self):
    qs = super().get_queryset() 
    custom_sort_order = ['superuser', 'admin', 'executive', 'client', 'maintainer', 'other']
    return sorted(qs, key=lambda item: custom_sort_order.index(item.groups.first().name))