首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在M2O中返回的令人困惑的遍历上编写Django查询,然后转发到M2M

如何在M2O中返回的令人困惑的遍历上编写Django查询,然后转发到M2M
EN

Stack Overflow用户
提问于 2012-04-08 20:34:51
回答 1查看 119关注 0票数 0

如果用户是订单的供应商代表或经理的一部分,我将尝试为用户获取所有订单。

我会用一些代码更好地解释。这是我的models.py的相关部分

代码语言:javascript
复制
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 )

要获得用户创建的所有订单,很容易:

代码语言:javascript
复制
Order.objects.filter( creator = user.pk )

我不知道如何获得这一条的原因是因为我不知道如何使用or -子句(经理或代表)或在filter关系中是否存在(检查是否有一部分经理/代表列表)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-08 20:48:55

好的,首先,为了解释这两种语法: to或in filter,您可以使用Q对象:

代码语言:javascript
复制
from django.db.models import Q
results = MyModel.objects.filter(Q(name='daniel') | Q(status='fantastic'))

要测试ManyToMany中的成员资格,只需使用=

代码语言:javascript
复制
results = MyModel.objects.filter(user__name='daniel')

意思是“拥有一个名为daniel的用户”(正如您可能认为的那样,“只有一个用户,即daniel")。

所以,把这些放在一起,你可以做:

代码语言:javascript
复制
Order.objects.filter(Q(vendor__managers=my_user) | 
                     Q(vendor__representatives=my_user))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10066280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档