Джанго: Получите объект ManyToMany из ManyToManyField

#django #database #many-to-many #manytomanyfield

Вопрос:

Я знаю, что могу найти всех авторов такой статьи, как:

 paper.authors.all()
 

Это прекрасно работает, но просто возвращает мне набор запросов авторов.

Но я хочу, чтобы объект ManyToMany был похож (потому что я хочу сортировать после идентификаторов).

(идентификатор (BigAutoField), статья, автор)

Есть ли более быстрый способ сделать это тогда:

 Paper.authors.through.objects.all().filter(paper=paper)
 

Поскольку моя база данных действительно велика ~200 миллионов записей, приведенная выше команда невыполнима

Моя модель выглядит так:

 class Paper(models.Model, ILiterature):
    authors = models.ManyToManyField(Author, blank=True)
    (...)
 

Ответ №1:

Вы можете попробовать выбрать оптом,

 papers = Paper.authors.through.in_bulk(ids)
 

Массовые команды Django работают быстрее и предназначены для массивных БД, подобных вашей. Вы можете проверить https://levelup.gitconnected.com/optimizing-django-queries-28e96ad204de подробности здесь.

Комментарии:

1. Это не решает проблему 🙁 все еще слишком медленно.