Django - 如何有效地将列表添加到多对多模型字段

时间:2017-03-01 00:16:09

标签: python django

我有三个型号。帖子,标签和订阅者。帖子和订阅者之间存在多对多关系,而标签和订阅者之间存在多对多关系。帖子和标签之间存在ForeignKey关系。我想将给定帖子的所有订阅者添加到它的相关标签中。我可以通过以下方式实现这一目标。但有没有一种更有效的方法来迭代两个for循环?

all_subscribers = post.subscribers.all()
for tag in tags:
    for subscriber in all_subscribers:
        tag.subscriber.add(subscriber)
tag.save()

请注意,为了简单起见,我上面使用了一个玩具示例。

1 个答案:

答案 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)