這個問題是關於RelatedManager.add(),它用於將模型對象實例添加到多對一或多對多的關係。爲了說明我的問題,比方說,我有以下兩種模式:現在爲什麼沒有RelatedManager.add()接受一個迭代作爲參數?
class Book(models.Model):
title = models.CharField()
class Author(models.Model):
name = models.CharField()
books = models.ManyToManyField(Book)
,每個Author
我有我想要添加到關係Book
對象的列表。目前,我在做這樣的:
book_objects = [
<Book: Harry Potter and the Philosopher's Stone>,
<Book: Harry Potter and the Chamber of Secrets>,
<Book: Harry Potter and the Prisoner of Azkaban>
]
jk_rowling = Author.objects.get(name='J. K. Rowling')
for book in book_objects:
jk_rowling.books.add(book)
jk_rowling.save()
然而,這是不是很有效,因爲我必須處理成千上萬個對象被添加到這樣的一個關係,它需要年齡。相反,Django文檔recommends將多個模型對象作爲參數調用add()
。也就是說,我必須做類似如下:
jk_rowling.books.add(book1, book2, book3)
但我不能這樣做,因爲我不知道電話號碼的對象添加到關係事前。我不明白爲什麼我不能做到以下幾點:
jk_rowling.books.add(book_objects)
爲什麼不add()
接受迭代作爲參數?我怎樣才能更有效地爲每個對象分別調用add()
來爲這樣的關係添加大量對象?非常感謝!
這將幫助:http://stackoverflow.com/questions/6996176/how-to-create-an-object-for-a-django模型與多對多字段 – Thomas
@ init3啊,這很有趣。我並沒有意識到你實際上可以將一個主鍵列表傳遞給這樣的關係:'jk_rowling.books = [1,2,3]'。這在Django的文檔中沒有說明。太好了,這應該爲我節省一些數據庫查詢。謝謝! – pemistahl