2017-03-01 41 views
1

我有三種模型。帖子,標籤和訂閱者。在帖子和訂閱者之間存在多對多關係,並且在標籤和訂閱者之間存在另一個多對多關係。帖子和標籤之間有一個外鍵關係。我想將給定帖子的所有訂閱者添加到它的關聯標籤。我可以通過執行以下操作來實現此目的。但是,有沒有更有效的方法來做這件事,而不是迭代兩個for循環?Django - 如何高效地將列表添加到多對多模型字段中

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

請注意,爲簡單起見,我使用上面的玩具示例。

回答

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) 
相關問題