я получаю сообщение об ошибке. django .urls.exceptions.NoReverseMatch - PullRequest
0 голосов
/ 17 июня 2020

Я начал изучать Django несколько дней go, и я получаю эту ошибку:

django .urls.exceptions.NoReverseMatch: Обратный для 'create_order' без аргументов не найдено. Пробовали 1 шаблон (ы): ['create_order / (? P [^ /] +) / $'] *

urls.py

 path('create_order/<str:pk>/', views.createOrder, name='create_order'),

views.py

def createOrder(request, pk):
customer = Customer.objects.get(id=pk)
form = OrderForm(initial={'customer': customer})
if request.method == 'POST':
    # print('Printing:', request.POST)
    form = OrderForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('/')
context = {
    'form': form
}
return render(request, 'accounts/order_form.html', context)

order_form. html

{%  extends 'accounts/main.html' %}
{% load static %}
{% block content %}
<br>
<div class="row">
    <div class="col-12 col-md-6">
        <div class="card card-body">
            <form action="" method="post">
                {% csrf_token %}
                {{form}}
                <input class="btn btn-sm btn-danger" type="submit" value="Conform">
            </form>
        </div>
    </div>
</div>

{% endblock %}

заказчик. html

<div class="row">
	<div class="col-md">
		<div class="card card-body">
			<h5>Customer:</h5>
			<hr>
			<a class="btn btn-outline-info  btn-sm btn-block" href="">Update Customer</a>
			<a class="btn btn-outline-info  btn-sm btn-block" href="{% url 'create_order' customer.id %}">Place Order</a>

		</div>
	</div>

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Я также следил за этим руководством с YouTube (dennis ivy) и получил ту же ошибку, не знаю, в чем проблема, но просто замените файл urls.py из github с тем же контекстом, и он не показывает эту ошибку, .

urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.home, name="home"),
    path('products/', views.products, name='products'),
    path('customer/<str:pk_test>/', views.customer, name="customer"),

    path('create_order/<str:pk>/', views.createOrder, name="create_order"),
    path('update_order/<str:pk>/', views.updateOrder, name="update_order"),
    path('delete_order/<str:pk>/', views.deleteOrder, name="delete_order"),


]

views.py

from django.forms import inlineformset_factory
def createOrder(request, pk):
    OrderFormSet = inlineformset_factory(Customer, Order, fields=('product', 'status'), extra=10 )
    customer = Customer.objects.get(id=pk)
    formset = OrderFormSet(queryset=Order.objects.none(),instance=customer)
    #form = OrderForm(initial={'customer':customer})
    if request.method == 'POST':
        #print('Printing POST:', request.POST)
        #form = OrderForm(request.POST)
        formset = OrderFormSet(request.POST, instance=customer)
        if formset.is_valid():
            formset.save()
            return redirect('/')

    context = {'form':formset}
    return render(request, 'accounts/order_form.html', context)

order_form. html

{%  extends 'accounts/main.html' %}
{% load static %}
{% block content %}


<div class="row">
    <div class="col-md-6">
        <div class="card card-body">

            <form action="" method="POST">
                {% csrf_token %}
                {{ form.management_form }}
                {% for field in form %}
                    {{field}}
                    <hr>
                {% endfor %}

                <input type="submit" name="Submit">
            </form>

        </div>
    </div>
</div>


{% endblock %}

снова я не знаю, почему он показывал эту ошибку и где была проблема, но просто повторил ее с тем же кодом из github, и это сработало .. если кто-то знает, как это работал, что будет очень полезно в ближайшем будущем. С уважением, Харис Ахмад

0 голосов
/ 17 июня 2020

Как говорилось в ошибке, попытка была выполнена с пустым аргументом, это означает, что в контексте не было доступного значения клиента. Итак, вам нужно отправить значение customer через контекст, например:

context = {
    'customer' : customer, 
    'form': form
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...