我想知道如何根据模型用户外键&&amp ;;来过滤模型查询集结果。它的相关名称,组和&权限。这是我想要发生的一个简单例子:
下面列出的是上面描述的场景,我最初尝试解决方案:
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
我已初步尝试解决方案,但想知道处理这种情况的“正确”方法。不用多说,这就是问题:
问:如何基于用户名,组和组合的组合来过滤模型?权限?
答案 0 :(得分:1)
如果我理解正确,您希望所有车辆由用户拥有或由同一组的用户拥有。有了你的模型你可能会这样做(未经测试):
Car.objects.filter(Q(carOwner=user) | Q(carOwner__groups__in=user.groups))
附注:
此方法可能会生成更好的查询,而不是使用字符串比较电子邮件和组名称,它将使用用户和用户的组ID。
使用car_owner
代替carOwner
,python中的属性名称为preferably named all lower case and separated by underscore