我有以下内容:
class Customer(model):
stores = models.ManyToManyField(Store, related_name = "customers")
subscriptions = models.ManyToManyField(Subscription, through = "CustomerSubscription")
class CustomerSubscription(model):
subscription = models.ForeignKey(Subscription)
customer = models.ForeignKey(Customer)
class Subscription(model):
is_valid = models.BooleanField()
对于给定的商店示例:
store = Store.objects.get(pk=1)
我想获取所有客户的所有订阅,并将is_valid设置为False。
这是我的尝试,似乎是有效的:
customers = store.customers.all()
for c in customers:
c.subscriptions.update(is_valid=False)
然后我尝试使用prefect_related:
customers = store.customers.prefect_related("subscriptions")
for c in customers:
c.subscriptions.update(is_valid=False)
但我不相信我这样做是正确的,因为它导致更多的sql查询比我第一次尝试。我该怎么做?
1条答案
按热度按时间u91tlkcl1#
问题是,你在一个循环中运行一个查询,这会创建很多请求(你拥有的用户越多,发出的请求就越多)。你可以做的是让它更容易,通过你的CustomerSubscription类,而不是客户类。
类似于:
它的工作方式是:
它将访问所有CustomerSubscription行并更新订阅值的is_valid值。注意subscription和is_valid之间的双下划线,它允许您跟踪条目之间的链接。