Как получить доступ к первичному ключу из общего представления списка?
Я пытаюсь получить доступ к первичному ключу url из общего представления списка. Позвольте мне объяснить. Итак, в настоящее время у меня есть простая страница со списком экземпляров студентов из модели student
. Каждая строка посвящена одному студенту, например, имя, возраст, email и т.д. Теперь я хочу добавить ссылку на каждую строку, чтобы можно было просмотреть календарь каждого студента, как только я нажму на нее. Сейчас представление календаря представляет собой обычный ListView, как показано ниже
class CalendarView(LoginRequiredMixin, generic.ListView):
model = Class
template_name = 'leads/calendar.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# use today's date for the calendar
d = get_date(self.request.GET.get('month', None))
# Instantiate our calendar class with today's year and date
cal = Calendar(d.year, d.month)
# Call the formatmonth method, which returns our calendar as a table
html_cal = cal.formatmonth(withyear=True)
context['calendar'] = mark_safe(html_cal)
context['prev_month'] = prev_month(d)
context['next_month'] = next_month(d)
return context
Однако я хочу, чтобы календарь показывал только информацию, относящуюся к студенту, на котором я щелкнул. Чтобы сделать это, мне нужно иметь возможность использовать первичный ключ (или ID) студента в представлении календаря. Конечно, я могу встроить первичный ключ в url, но я понятия не имею, как получить доступ к pk в моем generic.ListView. Также, я знаю, что некоторые из вас могут предложить мне переключить представление на функцию, но я не собираюсь использовать функцию, так как я сделал большую часть своего кодирования в generic версии. Я надеюсь, что вы, ребята, сможете помочь, и задавайте мне любые вопросы, которые у вас есть.
Допустим, ваш url-путь выглядит так:
path('calendar/<int:studentId>/', CalendarView.as_view(), name='CalendarView'),
Тогда вы можете сделать:
class CalendarView(LoginRequiredMixin, generic.ListView):
def get_queryset(self):
return Class.objects.filter(student__id=self.kwargs['studentId'])