【问题标题】:Django: query filter for group in which user is partDjango:用户所属组的查询过滤器
【发布时间】:2019-01-04 11:44:37
【问题描述】:

我正在尝试过滤与登录用户所属的组相关的视图。

假设我们有一个属于 DOGS 组的用户。我想出了如何过滤特定的意味着已知组名 = DOGS。

Models.py

from django.contrib.auth.models import Group

    class Customer(models.Model):
        customerName = models.CharField(max_length=50)
        accountOwner = models.ForeignKey(Group, null=True, related_name='usGroup', on_delete=models.SET_NULL )

如何在

中做到这一点

views.py

from django.contrib.auth.models import User, Group

 @login_required
    def home(request):
        myData = Customer.objects.filter("Return only data of the group to which the user belongs".)

你有提示吗?我只找到了过滤特定组名的解决方案,但没有找到登录用户的属性。

提前致谢!

【问题讨论】:

    标签: django permissions views django-queryset


    【解决方案1】:

    如果我理解正确,您想获取所有Customers 为accountOwner,这是登录的User 所属的Group 对象。

    一个请求有一个request.user 属性,用于存储登录的用户。然后我们可以对此进行过滤:

    @login_required
    def home(request):
        myData = Customer.objects.filter(accountOwner__user=request.user)

    请注意,由于User 可以同时属于多个组,因此您可能会获得属于不同accountOwners 的Customers。例如,如果登录的用户同时属于 DOGS 组和 CATS 组,那么您将获得属于 DOGS 组的Customers 以及属于 CATS 组的Customers。

    【讨论】:

    • 谢谢。我知道这很容易,但我不知道答案。我没有得到什么:为什么我可以通过“组”的外键关系访问用户?
    • @kingbrain:因为 Django 总是自动添加隐式反向关系。例如,您可以使用some_group.user_set.all() 获取Group 的用户。因此,在查询中,您可以使用user
    • @Willem_Van_Onsem:感谢您的回复,很抱歉再次打扰。这是多对多关系的内在概念,我说得对吗? Django Model Documentation
    • @kingbrain:对于任何类型的关系都很好,所以ForeignKeys、OneToOnes 等等。所以是的,你自己写的关系也是如此。如果您因此编写了两个模型AB,并且B 具有ForeignKeyA,那么您可以查询some_a.b_set.all() 以反向获取关系。
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多