django 过滤特定用户组中的客户

Posted

技术标签:

【中文标题】django 过滤特定用户组中的客户【英文标题】:django Filter customers in the specific user groups 【发布时间】:2020-12-16 07:34:20 【问题描述】:

我想在 ListView 中显示来自特定组的客户,但无法理解如何获取查询集

class CustomerList(ListView):
  model = Customer
  queryset = Customer.objects.filter(member__groups__name__in=['online', 'whatsapp'])
  template_name = 'customer/customer_list.html'

models.py

class Customer(models.Model): 
    member = models.ForeignKey(User, verbose_name=_("Customer"), on_delete=models.CASCADE)
    contact = models.ForeignKey(Contact, verbose_name=_("Contact"), on_delete=models.CASCADE, blank=True, null=True)
    ...

客户被添加到如下组中:

class AddUser(CreateView):
  def post(self, request, *args, **kwargs):
     form = UserForm(request.POST) 
     if form.is_valid(): 
        user = form.save(commit=False)
        group, created = Group.objects.get_or_create(name='online')
        user.groups.add(group)
        user.save()

【问题讨论】:

__in 需要两个扁平破折号而不是一个,这样可以解决问题吗? @voodoo-burger - 抱歉打错了,但效果不佳 related_name 的使用在这里令人困惑。如果你删除它,运行迁移并使用user__groups__name__in @voodoo-burger - 让我试试 这能回答你的问题吗? Django: How to filter Users that belong to a specific group 【参考方案1】:

我有类似的代码工作,检查这是否适合你 -

class ProfessorsList(generic.list.ListView):
  model = Staff
  queryset = Staff.objects.filter(member__groups__name='teaching')

对于多个组,您可以这样做:(我相信您已经在这样做了...)

Customer.objects.filter(member__groups__name__in=['online', ...])

如果它仍然不适合你尝试这样:

  users = User.objects.filter(groups__name__in=[your_groups])
  queryset = Customer.objects.filter(member__in=users)

确保customers 具有usersusersyour_groups 的一部分

【讨论】:

以上是关于django 过滤特定用户组中的客户的主要内容,如果未能解决你的问题,请参考以下文章

如何限制用户搜索视图中的特定模型?

Django,在模型外键中按组过滤用户

QuerySet 中的 Django _set.all() 过滤器

如何在Django中获取按用户过滤的关注者总数?

Django-form组件中过滤当前用户信息

当用户更改下拉过滤器中的值时,Django过滤更新查询