Рендеринг нескольких объектов из модели Django с помощью функции запроса

Работаю над добавлением некоторых объявлений о вакансиях на первую страницу моего django сайта. В настоящее время там размещено 20 вакансий для тестирования. У меня есть довольно простая модель django, которая содержит такие атрибуты, как статус вакансии (активная, неактивная, архивная) и время создания объявления, чтобы я мог упорядочить их в хронологическом порядке.

Я хочу иметь возможность отображать только 4 последние вакансии в верхней части страницы, а остальные 16 вакансий отображать в списке под ними.

Вот что у меня есть на данный момент...

Models.py

    from django.db import models

    class Job(models.Model):

    ACTIVE = 'active'
    INACTIVE = 'inactive'
    ARCHIVED = 'archived'

    CHOICES_STATUS = (
       (ACTIVE, 'Active'),
       (INACTIVE, 'Inactive'),
       (ARCHIVED, 'Archived')
    )

    status = models.CharField(max_length=20, choices=CHOICES_STATUS, default=ACTIVE)

    created_at = models.DateTimeField(auto_now_add=True)


    

Для того чтобы затем отобразить вакансии на первой странице сайта, я обращаюсь к модели вакансии в представлении, как показано ниже.

Views.py

from django.shortcuts import render, redirect
from apps.job.models import Job

def frontpage(request):
    jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4]

    all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')

    return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})

В этом случае задания появляются на главной странице, однако кажется, что конфигурация диктуется последним запросом, т.е. all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at').

Я знаю это, потому что если я удалю <div class="column is-one-quarter"> (который я использую для подстраховки) из frontpage.html django отображает все 20 сообщений в верхней части страницы, тогда как если я использую jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4] в качестве последнего запроса, я вижу 4 последних сообщения в верхней части страницы и те же 4 последних сообщения под ними.

Вопрос в том, могу ли я/как я могу ссылаться на одну и ту же модель в моем запросе и ожидать, что django вернет другой набор объектов в этой модели?

Можете ли вы поделиться шаблоном? В любом случае, я полагаю, что проблема здесь:

return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})

Вы пытаетесь добавить два одинаковых ключевых слова в dict: 'jobs' и 'jobs'. Должно быть что-то вроде:

return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs})

А затем используйте объекты jobs и all_jobs в своем шаблоне

Как сказано. return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs}) и в 'core/frontpage.html' ... второй раз появляется 'jobs', где вы хотите перечислить все вакансии... замените его на 'all_jobs'...

Дальнейшее объяснение,

  • Третьим аргументом render() является словарь. Он называется контекст. (я предполагаю)
  • Это пары ключ-значение. Те, что в кавычках - ключи. После ':' - значение. Значение может быть любым типом данных или obj.
  • .
  • Эти ключи отправляются в шаблон, т.е. в html-страницу, которую вы отображаете, здесь 'core/frontpage.html'.
  • Эти ключи могут быть использованы как переменные в шаблоне (html странице), например ... цикл через него, если это iterable (как список или как здесь, queryset)
  • .
  • В вашем коде, вы назначили ключ 'jobs' дважды... {'jobs': jobs, 'jobs':all_jobs}... второе переопределяет первое.
Вернуться на верх