【问题标题】:Django: filter ManyToMany joinDjango:过滤多对多连接
【发布时间】:2012-03-10 14:11:26
【问题描述】:

我有订阅者订阅各种列表的应用程序。 这里的域是:List model/SubscriberModel/ListSubscription model。

List 类定义包含以下行

subscribers = models.ManyToManyField(Subscriber, through='ListSubscription')

虽然此代码允许我获取所有订阅者,但我只需要其中的一些。诀窍是 ListSubscription 类包含“is_active”布尔字段,用于标识活动或非活动订阅。 是否有一些直接的解决方案可以将“is_active=True”添加到多对多连接? 在普通 SQL 中,我会将此条件添加到连接子句中,但不确定 Django ORM 方式。

这里的理想结果是能够拥有一个查询集来获取所有具有各自“活跃”订阅者的列表。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    ManyToMany 字段已经是一个查询集,所以如果你想要活跃的订阅者,你可以调用它的filter 方法,也许通过List 类中的方法。 through 表可用于过滤,方法与目标表相同:

    class List(models.Model):
        # ... etc ...
        @property
        def active_subscribers(self):
            return self.subscribers.filter(listsubscription__is_active = True)
    

    要返回至少有一个活跃订阅者的列表,请使用以下查询:

    List.objects.filter(listsubscription__is_active = True)
    

    【讨论】:

      猜你喜欢
      • 2020-05-27
      • 2011-01-14
      • 2014-06-11
      • 1970-01-01
      • 2016-06-19
      • 2018-06-07
      • 2012-09-26
      • 2015-07-18
      • 2020-06-18
      相关资源
      最近更新 更多