2013-06-28 459 views
13

批量更新我有兩個型號如下:許多到很多領域

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    year = models.IntegerField(max_lenght=4) 
    author = models.ManyToManyField(null=true, blank=true) 


class Author(models.CustomUser): 
    # some fields 

現在,我所希望做的是增加一個Author多個Book對象,而迭代書對象的列表。

根據docs,Django的更新方法不支持ManyToManyField。它說

您只能使用此方法設置非關係字段和ForeignKey字段。要更新非關係字段,請將新值作爲常量提供。要更新ForeignKey字段,請將新值設置爲要指向的新模型實例。

所以目前我正在做以下這是非常低效的,因爲我將爲每個書對象的數據庫。

author = Author.objects.get(pk=1) 
books = Book.objects.filter(**kwargs) # say this returns 100 objects 
# each loop here will hit the database making it really inefficient 
# for long lists. 
for book in books: 
    book.authors.add(author) 
    book.save() 

我很確定有一種解決方法,但我只是無法在文檔中找到它。任何幫助,將不勝感激。由於

+2

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/勾選此項.....通過m2m部分的「其他」端添加... – boltsfrombluesky

+0

可能的重複[如何創建一個多對多Django模型的對象?](http://stackoverflow.com/questions/6996176/how-to-create-an-object-for-a-django-model-多對多字段) – Pureferret

回答

10

答案就在這裏:
https://stackoverflow.com/a/10116452/202168

總之,(在Django> = 1.4),你可以做在一個bulk_create通過模型,即使你還沒有定義,通過模型的自定義。

+8

感謝匿名低調投票者...更有幫助的是增加一條評論,解釋我的回答有什麼問題 – Anentropic

+0

dunno誰downvoted:linked答案是固體 – Bartvds

+0

@Antropic Link指向正確的答案。 +1 –