我有三个型号。帖子,标签和订阅者。帖子和订阅者之间存在多对多关系,而标签和订阅者之间存在多对多关系。帖子和标签之间存在ForeignKey关系。我想将给定帖子的所有订阅者添加到它的相关标签中。我可以通过以下方式实现这一目标。但有没有一种更有效的方法来迭代两个for循环?
all_subscribers = post.subscribers.all()
for tag in tags:
for subscriber in all_subscribers:
tag.subscriber.add(subscriber)
tag.save()
请注意,为了简单起见,我上面使用了一个玩具示例。
答案 0 :(得分:1)
我认为你在寻找的是:
for tag in tags:
tag.subscriber.add(*all_subscribers)
tag.save()
另一种方式,也就是更快的方法是创建中间表
class Subscription(models.Molde):
tag = models.ForeignKey(Tag)
subscriber = models.ForeignKey(Subscriber)
然后批量创建订阅
subscriptions = []
for tag in tags:
for subscriber in all_subscribers:
subscriptions.append(Subscription(tag=tag, subscriber=subscriber))
Subscription.objects.bulk_create(subscriptions)