Я пытаюсь выучить 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».
Большое спасибо за любую помощь.