Получение нескольких связанных объектов из Django ORM

У меня есть такая модель в Django:

from django.db import models


class Document(models.Model):
    name = models.CharField(max_length=256)


class Template(models.Model):
    name = models.CharField(max_length=256)
    document = models.ForeignKey(Document, on_delete=models.CASCADE)


class SharedDocument(models.Model):
    workspace = models.CharField(max_length=256)
    document = models.ForeignKey(Document, on_delete=models.CASCADE)

Мне нужно получить список шаблонов по рабочей области в SharedDocument.

Я делал такой запрос:

>>> shared_documents = SharedDocument.objects.filter(workspace='1').prefetch_related('document')
>>> [shared_document.document.template_set.get() for shared_document in shared_documents]

Но с моей точки зрения это выглядит немного некрасиво. Поэтому вопрос: "Можно ли сделать то, что я хочу, сформировав запрос без этой части: [shared_document.document.template_set.get() for shared_document in shared_documents]"?

Для уточнения: В результате я хочу иметь список/QuerySet с объектами Template.

Приветствую, Олег

Спасибо моему коллеге Дмитрию Якуткину, у которого нет аккаунта на stackoverflow:

Ответ:

Template.objects.filter(document__shareddocument__workspace="1")
Вернуться на верх