Ошибка NoReverseMatch в Django, невозможно передать параметр id - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь выучить python / django, но продолжаю сталкиваться с этой ошибкой, когда пытаюсь добавить возможность для кого-то иметь возможность отвечать на уже существующую запись на веб-сайте. Похоже, я ничего не передаю для параметра в представлении, но я не могу понять, почему эта же структура работала для другого проекта, который я делал из книги. (Кстати, это мой первый пост здесь, я читал множество других постов по этому поводу здесь и в других местах, и ни один из них не помог до сих пор, извините, если что-то из этого глупо).

Вот ошибка : Тип исключения: NoReverseMatch в / instructors / instructors / 1 / Значение исключения: Обратное значение для 'new_inquiry' с аргументами '(' ',)' не найдено. Попробован 1 шаблон (ов): ['instructors / new_inquiry / (? P [0-9] +) / $']

urls.py: я получаю сообщение об ошибке из последнего, '' URL представления new_inquiry ', но я включаю все на тот случай, если что-то может быть связано

from django.urls import path
from . import views

app_name = 'instructors'

urlpatterns = [
    path('', views.index, name='index'),
    path('instructors/<int:instructor_id>/', views.inquiry, name='inquiry'),
    path('instructors/new_instructor/', views.new_instructor, name='new_instructor'),
    path('new_inquiry/<int:instructor_id>/', views.new_inquiry, name='new_inquiry'),
]

views.py: Проблема связана с функцией new_inquiry (я думаю). Я просто не могу заставить его передать параметр instructor_id по какой-то причине ...

from django.shortcuts import render, redirect
from .models import Instructors
from .forms import InstructorForm, NewInquiryForm

def index(request):
    instructors = Instructors.objects.order_by('created_date')
    context = {'instructors': instructors}
    return render(request, 'instructors/index.html', context)

def new_instructor(request):
    if request.method != 'POST':
        form = InstructorForm()
    else:
        form = InstructorForm(data=request.POST)
        if form.is_valid():
            new_instructor = form.save(commit=False)
            new_instructor.save()
            return redirect('instructors:index')

    context = {'form': form}
    return render(request, 'instructors/new_instructor.html', context)

def inquiry(request, instructor_id):
    inquiry = Instructors.objects.get(id=instructor_id)
    inquiries = inquiry.instructorinquiries_set.order_by('-inquiry_date')
    context = {'inquiry': inquiry, 'inquiries': inquiries}
    return render(request, 'instructors/inquiries.html', context)

def new_inquiry(request, instructor_id):
    instructor = Instructors.objects.get(id=instructor_id)

    if request.method != 'POST':
        form = NewInquiryForm()
    else:
        form = NewInquiryForm(data=request.POST)
        if form.is_valid():
            new_inquiry = form.save(commit=False)
            new_inquiry.instructor = instructor
            new_inquiry.save()
            return redirect('instructors:inquiry', instructor_id=instructor_id)

    context = {'instructor': instructor, 'form': form}
    return render(request, 'instructors/new_inquiry.html', context)

Шаблоны:

inquiries.html: шаблон, который включает ссылку на шаблон формы. Я получаю сообщение об ошибке, когда пытаюсь зайти на эту страницу.

<p><a href="{% url 'instructors:new_inquiry' instructor.id %}">Add new inquiry posting</a></p>

new_inquiry.html: шаблон формы

<form action="{% url 'instructors:new_inquiry' instructor.id %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">Add inquiry</button>
</form>

Примечание: поскольку я возился, я обнаружил, что если Я заменяю 'instructor_id' на целое число для параметра, подобного этому <p><a href="{% url 'instructors:new_inquiry' 1 %}">Add new inquiry posting</a></p>, оно позволит мне go перейти на страницу, а затем позволит мне go к форме и заполнит ее, и все будет работать, но очевидно, что не будет работать, так как отправит содержимое формы на любой идентификатор, указанный там, а не на соответствующий идентификатор.

Я не буду включать модели, если кто-то их не попросит, так как этот пост уже очень длинный, но в случае необходимости есть две модели - «Инструкторы» и «Инструкторские запросы». InstructorInquiries содержит внешний ключ «Instructors».

Большое спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...