Модель Django запрашивает все поля, включая ManyToManyField, одной командой - PullRequest
0 голосов
/ 27 апреля 2019

Играя с ManyToManyField, я подумал, есть ли способ автоматически запросить ManyToManyField так же, как вы делаете ForeignKey, используя select_related()?

Таблица:

class Author(models.Model):
  fullname = models.CharField(max_length=100)

class Foo(models.Model):
  bar = models.CharField(max_length=100)

class Book(models.Model):
  title = models.CharField(max_length=100)
  foo = models.ForeignKey(Foo)
  author = models.ManyToManyField(Author)

Чтобы получить нужные мне данные от Book, я обычно делаю:

book = Book.objects.select_related('foo').get(pk=1)
authors = book.author.all()

, что делает 2 поездки. Есть ли способ объединить их так, как это делает select_related()?

1 Ответ

0 голосов
/ 27 апреля 2019

Вы можете использовать prefetch_related для поля M2M

Book.objects.select_related('foo').prefetch_related('author').values('author', 'title').get(pk=1)
...