Django 如何根据用户组过滤模型对象&;权限? 背景:

Django 如何根据用户组过滤模型对象&;权限? 背景:,django,django-models,django-admin,django-queryset,django-orm,Django,Django Models,Django Admin,Django Queryset,Django Orm,我想知道如何根据models用户foreignkey及其关联的名称、组和权限筛选model queryset结果。以下是我希望发生的一个简单示例: 假设每个员工都可以使用公司的汽车(只读状态) 也可以说,任何员工也可以选择使用自己的汽车(仅可由车主修改) 下面列出的是我最初尝试解决方案时所描述的场景: from django.contrib.auth.models import User from django.db.models import Q user1 = User.objects

我想知道如何根据models用户foreignkey及其关联的名称、组和权限筛选model queryset结果。以下是我希望发生的一个简单示例:

  • 假设每个员工都可以使用公司的汽车(只读状态)
  • 也可以说,任何员工也可以选择使用自己的汽车(仅可由车主修改)
下面列出的是我最初尝试解决方案时所描述的场景:

from django.contrib.auth.models import User
from django.db.models import Q

user1 = User.objects.create_user("Billy", 'bbob@gmail.com', 'pw');
user2 = User.objects.create_user("Johnny Boy", 'jbo@gmail.com', 'pw2');
user1.groups.add('employee')
user2.groups.add('employee')

class Car(models.Model):
     name = models.CharField(max_length=200)
     color = models.CharField(max_length=50)
     carOwner = models.OneToOneField('User')

qObj = Q(carOwner__user_username = user1.username) 

for empGroup in user1.groups:
    qObj |= Q(carOwner__groups__icontains = empGroup)

transOpts= Car.objects.filter(qObj) #All Transportation Options for given user
问题: 我已经提供了解决方案的初步尝试,但想知道处理这种情况的“正确”方法是什么。毫无疑问,问题是:


问:我如何根据用户名、组和权限组合筛选车型?

如果我理解正确,您希望所有车辆都归用户所有或归同一组的用户所有。对于您的模型,您可能可以这样做(未经测试):

旁注:

这种方法可能会生成更好的查询,而不是对电子邮件和组名使用字符串比较,它将使用用户和用户的组ID


使用
car\u owner
而不是
carOwner
,python中的属性名称是

此答案不再正确。您应该使用
Q(车主组名中=user.groups)而不是
Q(车主组名中=user.groups))
Car.objects.filter(Q(carOwner=user) | Q(carOwner__groups__in=user.groups))