Обратитесь к create_order без аргументов. Пробовали 1 шаблон (ы): ['create_order / (? P <pk>[^ /] +) / $'] - PullRequest
0 голосов
/ 04 августа 2020

Я получаю эту ошибку, когда использую

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

, но такой ошибки нет, если путь равен ..

path('create_order', views.createOrder, name="create_order"),

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

def createOrder(request, pk):
    OrderFormSet = inlineformset_factory(Customer, Order , fields=('product','status'), extra=9)
    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)
        formset = OrderFormSet(request.POST, instance=customer)
        if formset.is_valid():
            formset.save()
            return redirect('/')

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

Я также пробовал перенаправить, это не работает, проблема с urls.py.

заказчик. html

{% extends 'accounts/main.html' %}

{% block content %}

<br>
<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>

   <div class="col-md">
        <div class="card card-body">
            <h5>Contact Information</h5>
            <hr>
            <p>Email: {{customer.email}}</p>
            <p>Phone: {{customer.phone}}</p>
        </div>
    </div>

    <div class="col-md">
        <div class="card card-body">
            <h5>Total Order</h5>
            <hr>
            <h1 style="text-align: center;padding: 10px;">{{order_count}}</h1>
        </div>
    </div>
</div>

<br>
<div class="row">
    <div class="col">
        <div class="card card-body">
            <form method="POST">
                <button class="btn btn-primary" type="submit">Search</button>
            </form>
        </div>
    </div>
</div>

<br>
<div class="row">
    <div class="col-md">
        <div class="card card-body">
            <table class="table table-sm">
                <tr>
                    <th>Product</th>
                    <th>Category</th>
                    <th>Date Ordered</th>
                    <th>Status</th>
                    <th>Update</th>
                    <th>Remove</th>
                </tr>

                {% for order in orders %}
                    <tr>
                        <td>{{order.product}}</td>
                        <td>{{order.product.category}}</td>
                        <td>{{order.date_created}}</td>
                        <td>{{order.status}}</td>
                        <td><a  class="btn btn-outline-info btn-md " href="{% url 'update_order' order.id %}">Update</a></td>
                        <td><a class="btn btn-outline-danger btn-md " href="{% url 'delete_order' order.id %}">Delete</a></td>
                    </tr>
                {% endfor %}
            </table>
        </div>
    </div>
</div>

{% endblock %}

models.py

class Customer(models.Model):
    name = models.CharField(max_length=200, null=True, blank=True)
    phone = models.CharField(max_length=200, null=True, blank=True)
    email = models.CharField(max_length=200, null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name

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 %}
                {{formset.managment_form}} <!-- to remove the managmentForm data missing or has been tempered wiith , error -->
                {% for form in formset %}
                {{formset}}    <!--in context of views.py -->
                <hr>
                {% endfor %}

                <input class="btn btn-outline-success btn-md" type="submit" name="submit">
            </form>
        </div>
    </div>
</div>

{% endblock %}

Я добавил шаблоны, и спасибо всем, но я думаю, что единственная проблема связана с urls.py, потому что если я использую

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

вместо

path('create_order', views.createOrder, name="create_order"),

, то я получаю сообщение об ошибке, иначе для указанного выше пути такой ошибки нет.

Ответы [ 2 ]

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

Я не знаю, в чем проблема, но просто заменил файл 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 голосов
/ 23 августа 2020

я знаю, где проблема

на панели управления. html вы должны удалить строку, содержащую {% url 'create_order'%}

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