Как избежать ошибки в пути множественного первичного ключа Django - PullRequest
0 голосов
/ 22 сентября 2018

Я хочу посмотреть результаты ученика, нажав на страницы: Выбрать сессию -> Выбрать курс

Но получаю сообщение об ошибке:

В обратном порядке для «selectresult» с ключевым словомаргументы '{' pk_1 ': 1}' не найдены.Попробован 1 шаблон (ов): ['Панель инструментов \ / selectsession \ / (? P [0-9] +) \ / (? P [0-9] +) $']

Myкод:

Шаблон URL в urls.py:

path('selectsession/', views.SelectSession.as_view(), name='selectsession'),
path('selectsession/<int:session_pk>/', views.SelectCourse.as_view(), name='selectcourse'),
path('selectsession/<int:session_pk>/<int:pk_1>', views.BatchResult.as_view(), name='selectresult'),

Шаблоны: selectsession.html:

<li><a href="{% url 'Dashboard:selectcourse' session_pk=sesid.sesid %}">{{sesid.sesid}}</a></li>

selectcourse.html:

<li><a href="{% url 'Dashboard:selectresult' pk_1=course.course.cid %}">{{course.course}} {{course.teacher}}</a></li>

views.py:

@method_decorator(login_required, name='dispatch')
class SelectSession(ListView):
    template_name = 'Dashboard/selectsession.html'
    model = Session
    fields = ['sesid']

    def get_queryset(self):
        return Session.objects.all()

@method_decorator(login_required, name='dispatch')
class SelectCourse(ListView):
    template_name = 'Dashboard/selectcourse.html'
    model = Registration
    fields = ['all']

    def get_queryset(self):
        course = Registration.objects.filter(session_id=self.kwargs['session_pk'])
        return course

@method_decorator(login_required, name='dispatch')
class BatchResult(ListView):
    template_name = 'Dashboard/batchResult.html'
    model = Result
    fields = ['all']

    def get_queryset(self):
        result=Result.objects.filter(asign__reg__id=self.kwargs['pk_1'])
        return result

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Сначала следуйте вашему сообщению об ошибке "Обратное для 'selectresult' с аргументами ключевого слова '{' pk_1 ': 1} не найдено."
Это означает, что проблема в вашем URL

path('selectsession/<int:session_pk>/<int:pk_1>', views.BatchResult.as_view(), name='selectresult'),

Теперь выясните, в чем проблема ....
Этот тип структуры URL генерирует URL-адрес как этот

localhost:8000/selectsession/2018/101

Итак, когда вы вызываете этот URL-адрес, вы должныдолжны передать оба значения "session_pk" и "pk_1".Вы можете назвать этот URL следующим образом:

{% url 'Dashboard:selectresult' 2018 101 %} 

, и этот тег URL будет генерировать URL-адрес, подобный

localhost:8000/selectsession/2018/101

Если вы понимаете это, измените свой файл selectcourse.html на:

<li><a href="{% url 'Dashboard:selectresult' sesid.sesid course.course.cid %}">{{course.course}} {{course.teacher}}</a></li>  

также измените selectcourse.html на:

<li><a href="{% url 'Dashboard:selectcourse' sesid.sesid %}">{{sesid.sesid}}</a></li>
0 голосов
/ 22 сентября 2018

Вы пробовали self.kwargs['pk'] в обоих списках вместо session_pk или pk_1?

...