Django:过滤manytomy连接

2024-10-01 13:44:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

列表类定义包含以下行

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

虽然这段代码允许我获得所有订阅者,但我只需要其中的一部分。诀窍在于ListSubscription 类包含标识活动订阅或非活动订阅的“is_active”布尔字段。 有没有一些策略性的解决方案可以在多对多连接中添加“Is_active=True”? 在纯SQL中,我会将此条件添加到join子句中,但不确定Django-ORM方式。在

这里理想的结果是能够有一个queryset来获取具有各自*active“订户的所有列表。在


Tags: 代码应用程序列表model定义modelslistsubscriber
1条回答
网友
1楼 · 发布于 2024-10-01 13:44:14

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

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

要返回至少有一个活动订阅服务器的列表,请使用以下查询:

^{pr2}$

相关问题 更多 >