Django ORM запрос для обновления обратного поля многие ко многим
Модели выглядят следующим образом:
class Book(models.Model):
name = models.TextField(verbose_name='Book Name')
class Author(models.Model):
name = models.TextField(verbose_name='Author Name')
Books = models.ManyToManyField(Book)
У книги может быть много авторов и автор может написать много книг
Сейчас,
- There is a list like:
[
{Book_id1:[Author_id1, Author_id2]},
{Book_id2:[Author_id2, Author_id3]},
]
Эту информацию необходимо обновить в БД. Как это можно сделать эффективным способом, используя ORM?
(В настоящее время в БД может быть Book_id1 связан с [Author_id1,Author_id3] поэтому обновление должно быть в состоянии добавить author_id2 и удалить author_id3)
Вы можете сделать два запроса к модели "многие ко многим":
data = [
{book_id1:[author_id1, author_id2]},
{book_id2:[author_id2, author_id3]},
]
book_ids = [book_id datum in data for book_id in datum]
BookAuthor = Author.books.through
BookAuthor.objects.filter(book_id__in=book_ids).delete()
BookAuthor.objects.bulk_create([
BookAuthor(book_id=bi, author_id=ai)
for datum in data
for bi, ais in datum.items()
for ai in ais
])