@constlapkin

Как передать в get_context_data() id объекта из context?

У меня есть две модели:
class Project(BaseModel):
    slug = models.SlugField(verbose_name='URL', unique=True, blank=False)
    category = models.ManyToManyField(Category, verbose_name='Category')
    title = models.CharField(max_length=200, verbose_name='Title', blank=False)
    publication = models.BooleanField(verbose_name='Publication', default=True)

и
class Screenshot(BaseModel):
    image = models.ImageField(upload_to='uploads/projects/%Y/%m/', verbose_name='Image', blank=False)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

Использую представление проекта, но не знаю, как связать изображения с проектом по его id.
Делаю примерно следующее:
class ProjectDetailView(DetailView):
    model = Project
    template_name = 'portfolio/project_detail.html'
    context_object_name = 'project'
    queryset = Project.objects.filter(publication=True)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['screenshots'] = Screenshot.objects.filter(project=???) # id from Project object
        return context


То есть через get_context_data() я добаляю в контекст объекты модели изображений, но как отфильтровать их по id проектов?
  • Вопрос задан
  • 389 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Вроде так:
def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['screenshots'] = Screenshot.objects.filter(project=self.object) # id from Project object
        return context

Но вообще он у вас и так передаётся в свойствах инстанса проекта как screenshot_set. Соответственно их можно взять оттуда, а не плодить сущность
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы