背景:
我想知道如何根据模型用户外键 && 其关联的名称、组和权限来过滤模型查询集结果。这是我想要发生的一个简单示例:
- 假设每个员工都可以使用公司汽车(只读状态)
- 还可以说任何员工也可以选择使用自己的汽车(只能由所有者修改)
下面列出的是上面描述的场景,我最初尝试了一个解决方案:
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
问题:
我已经提供了解决方案的初步尝试,但想知道处理这种情况的“正确”方法是什么。废话不多说,问题来了:
问:如何根据用户名、组和权限的组合过滤模型?