【发布时间】:2013-06-28 12:17:35
【问题描述】:
我有两个模型如下:
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()
我很确定有办法解决这个问题,但我只是无法在文档中找到它。
【问题讨论】:
-
docs.djangoproject.com/en/dev/topics/db/examples/many_to_many 检查这个.....通过 m2m 部分的“另一端”添加 ....
标签: django many-to-many bulk