Подтвердить что ты не робот

Массовое обновление для многих и многих полей

У меня есть две модели:

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 объектам без итерации по списку объектов книги.

Метод обновления Django не поддерживает ManyToManyField в соответствии с docs. В нем говорится:

С помощью этого метода вы можете устанавливать только поля отношения и поля 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()

Я уверен, что есть способ обойти это, но я просто не могу найти его в документах. Любая помощь будет оценена по достоинству. Благодаря

4b9b3361

Ответ 1

Ответ здесь:
fooobar.com/info/59196/...

Короче говоря, (в Django >= 1.4) вы можете сделать bulk_create на сквозной модели, даже если вы не определили пользовательскую модель.