如果用户是订单的供应商代表或经理的一部分,我将尝试为用户获取所有订单。
我会用一些代码更好地解释。这是我的models.py的相关部分
class Vendor( models.Model ) :
managers = models.ManyToManyField( User, related_name = 'managers' , limit_choices_to = { 'userprofile__user_types' : 4 } )
representatives = models.ManyToManyField( User, related_name = 'representatives', limit_choices_to = { 'userprofile__user_types' : 5 }, null = True, blank = True )
class Order( models.Model ) :
creator = models.ForeignKey( User, related_name = 'creator' )
approver = models.ForeignKey( User, related_name = 'approver' )
vendor = models.ForeignKey( Vendor, null = True, blank = True )
class UserType( models.Model ) :
name = models.CharField( max_length = 135 )
# id | name
#----+------------------
# 1 | tenant
# 2 | property manager
# 3 | property owner
# 4 | vendor manager
# 5 | vendor
# 6 | viewer
# 7 | moderator
# 8 | administrator
class UserProfile( models.Model ) :
user = models.OneToOneField( User )
user_types = models.ManyToManyField( UserType, null = True, blank = True )要获得用户创建的所有订单,很容易:
Order.objects.filter( creator = user.pk )我不知道如何获得这一条的原因是因为我不知道如何使用or -子句(经理或代表)或在filter关系中是否存在(检查是否有一部分经理/代表列表)。
发布于 2012-04-08 20:48:55
好的,首先,为了解释这两种语法: to或in filter,您可以使用Q对象:
from django.db.models import Q
results = MyModel.objects.filter(Q(name='daniel') | Q(status='fantastic'))要测试ManyToMany中的成员资格,只需使用=
results = MyModel.objects.filter(user__name='daniel')意思是“拥有一个名为daniel的用户”(正如您可能认为的那样,“只有一个用户,即daniel")。
所以,把这些放在一起,你可以做:
Order.objects.filter(Q(vendor__managers=my_user) |
Q(vendor__representatives=my_user))https://stackoverflow.com/questions/10066280
复制相似问题