Я относительно новичок в Джанго (v = 2.1).Я застрял в течение нескольких дней в поисках решения этой проблемы, которое, на мой взгляд, довольно легко, но, несмотря на чтение многих постов здесь и в других местах, так и не смогло его решить.У меня есть две модели: учитель и задание.Очень упрощенно:
models.py
class Teacher(models.Model):
name = models.CharField(max_length=200)
class Assignment(models.Model):
title = models.CharField(max_length=200)
teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True)
У меня есть (рабочий) сайт со списком заданий учителя №.x, который я создал с помощью универсальной функции DetailView и некоторого кода, выглядит следующим образом:
assignments_list.html
{% for assignment in teacher.assignment_set.all %}
...
<a href="{% url 'assignment-detail' pk1=assignment.teacher.pk pk2=assignment.pk %}">{{assignment.title}}</a>
...
{% endfor %}
Когда я нажимаю на assignment.title, я хочу получить страницу сведений о назначении этого конкретного учителя.Я использую этот URL Conf:
urls.py
urlpatterns += [path('teacher/<int:pk1>/assignment/<int:pk2>/', views.AssignmentDetailView.as_view(), name = 'assignment-detail')]
и я использую эту функцию просмотра (я пробовал несколько вариантов):
views.py
from .models import Teacher, Assignment
from django.views import generic
class AssignmentDetailView(generic.DetailView):
model = Assignment
template_name = 'assignment_detail.html'
def get_queryset(self, **kwargs):
queryset = super(AssignmentDetailView, self).get_queryset()
return queryset.filter(teacher_id=self.kwargs['pk1'], pk=self.kwargs['pk2'])
Я пытаюсь передать два параметра (pk1 и pk2), которые находятся в контексте страницы (которая содержит список назначений).Если я нажимаю на ссылку (assignment.title), я вижу URL с правильными номерами для pk1 и pk2 (я вижу это в адресной строке URL, например, http://localhost:8000/teacher/2/assignment/4). Но страница не отображается. При настройкеВ некоторых вещах я получаю разные ошибки:
- Синтаксические ошибки, проблемы с отсутствующими аргументами ... до сих пор решены.
- 'Набор запросов не получил ни одного объекта' (или аналогичная формулировка).
- Текущая ошибка: 'Представление app.views.AssignmentDetailView не вернуло объект HttpResponse. Вместо этого он вернул None.'
Мои вопросы:
- Что я делаю не так? Правильно ли я передаю? Или проблема в моем представлении? ... Как передать аргументы (Teacher pk и Assignment pk) из шаблона (или, просто, контекста?) Вфункция представления? И как использовать их для возврата правильных объектов из моей модели?
- Нужно ли передавать параметры каждый раз, когда вызывается функция представления, или параметры передаются автоматически из одного объекта?посмотреть (шаблон) на другой?
- Сначала я передаю аргументы через URL, но позже я бы хотел передать их, не переходя через URL: могу ли я использовать аргументы шаблона, но использовать их только в представлении (не в URL)?Это путь?
Большое спасибо за любые советы.