2013-06-28 255 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 –