Django возвращает NoReverseMatch
Шаблон с формой для редактирования данных. При попытке зайти на страницу - Возвращает django.urls.exceptions.NoReverseMatch: Reverse for 'edit_dish' with arguments '('',)' not found. 1 pattern(s) tried: ['cookroom/edit_dish/(?P[0-9]+)/$']
url.py
from django.urls import path
from . import views
app_name = 'cookroom'
urlpatterns = [
#Стартовая страница для кухни
path('',views.index, name='index'),
#Запасы товаров
path('stocks/', views.stocks, name='stocks'),
#Новое блюдо
path('new_dish/',views.new_dish, name='new_dish'),
#Редактировать блюдо
path('stocks/<int:dish_id>/edit_dish/',views.edit_dish, name='edit_dish'),
#Конкретное блюдо
path('stocks/<int:dish_id>/', views.dish, name='dish'),
]
вьюха
def edit_dish(request,dish_id):
"""Редактирование информации по текущему блюду"""
dish = Dish.objects.get(id=dish_id)
if request.method != 'POST':
form = DishForm(instance=dish)
else:
form = DishForm(instance=dish, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('cookroom:stocks'))
context = {'form':form}
return render(request, 'cookroom/edit_dish.html',context)
Шаблон с которого переходим
{% extends "cookroom/base.html" %}
{% block content %}
<h1>Остатки:</h1>
{% for dish in dishs %}
<ul>
<li>Код товара: {{ dish.id }}</li>
<li>Название: {{ dish.dish }}</li>
<li>Цена: {{ dish.price }}</li>
<li>Остаток: {{ dish.quantity }}</li>
<li><a href="{% url 'cookroom:edit_dish' dish.id %}">Редактировать</a></li>
<li><a href="{% url 'cookroom:dish' dish.id %}">Подробнее</a></li>
<li>------------------------------------------</li>
</ul>
{% endfor %}
{% endblock content %}
и шаблон, где уже форма есть, но выдает ошибку
{% extends "cookroom/base.html" %}
{% block content %}
<h1>Давай все тут поменяем</h1>
<form action="{% url 'cookroom:edit_dish' dish.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name='submit'>Сохранить</button>
</form>
{% endblock content %}
Не могу понять, в чем дело, так как страница, где просто отражаются данные, без формы, работает адекватно
вьюха(работает)
def dish(request,dish_id):
"""Выводит одно блюдо и всю информацию"""
dish = Dish.objects.get(id=dish_id)
#Проверка того, что тема принадлежит текущему пользователю
context = {'dish': dish}
return render(request,'cookroom/dish.html',context)
шаблон(работает)
{% extends "cookroom/base.html" %}
{% block content %}
<h1>{{ dish.dish }}</h1>
<p>Код товара: {{ dish.id }}</p>
<p>Название: {{ dish.dish }}</p>
<p>Цена: {{ dish.price }}</p>
<p>Остаток: {{ dish.quantity }}</p>
{% endblock content %}
Построенно по тому же принципу, но почему то edit_dish не отражатся. Я так понимаю, проблема в самом запросе?