新手 - Python Django - NoReverseMatch错误

时间:2017-06-13 23:44:02

标签: python django python-3.x django-views

我已经解决了很多相关的问题,但我无法解决这个问题所以我虽然最终会发布它,但我有一个应用程序'客户'其中将包含一个客户列表,目前有两个用户级别 1)客户 - 如果我以客户身份登录,我只会看到我的详细信息,我必须能够编辑和更改我的信息 2)顾问 - 如果我以顾问身份登录,我会看到一个客户列表,我可以对任何客户进行更改。 要做到这一点,我有一个编辑'点击按钮会重定向到“表格”状态。已经填充了特定字段,我可以编辑和保存。当我点击这个'编辑'我在/ customer /"得到了这个错误" NoReverseMatch。但是当我通过输入来直接导航到表单时," localhost:8000 / customer / 1 / edit"我可以看到表格。

这是我的views.py

 @login_required
def customer_edit(request, cust_number):
    # customer = get_object_or_404(Customer, pk=cust_number)
    if request.method == "POST":
        form = CustomerForm(request.POST)
        # form = CustomerForm(request.CUSTOMER, instance=customer)
        if form.is_valid():
            customer = form.save(commit=False)
            customer.cust_number = request.user
            customer.updated_date = timezone.now()
            customer.save()
            return redirect('customer', pk=cust_number)
    else:
        form = CustomerForm()
    return render(request, 'customers/customer_edit.html', {'form': form})

这是我的appname / urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^customer/$', views.customer, name='customer'),
    url(r'^home/$', views.home, name='home'),
    url(r'^customer/(?P<cust_number>\d+)/edit/$', views.customer_edit, name='customer_edit'),
]

这是我的projectname / urls.py

的一部分
url(r'', include('customers.urls', namespace="customers"))

这是我的customers / forms.py

from django import forms

from .models import Customer


class CustomerForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ('cust_number', 'name', 'address', 'city', 'state', 'zipcode', 'email', 'cell_phone',)

这是我的customer_edit.html

{% extends 'customers/base.html' %}

{% block content %}
    <h1>Edit Customer</h1>
    <form method="POST" class="customer-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

这是我的customer.html

{% extends 'customers/base.html' %}

{% block content %}
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Eagle Financial</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">

    </head>
    <body>
    <style>
        body {
            background-color: beige;
        }
    </style>
    <div class="container">
        <div class="row">
            <div class="col-md-10 col-md-offset-1">
                <div class="panel panel-primary">
                    <div class="panel-heading">Welcome!</div>
                    <div class="panel-body">
                        Eagle Financial Services, your Midwest Financial Services Partner.
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="row">
        <h2 style="padding-left: 15Px">Customer Information</h2>
    </div>
    <div>
        <table class="table table-striped table-bordered table-hover">
            <thead>
            <tr class="bg-info">
                <th>Customer ID</th>
                <th>Name</th>
                <th>Address</th>
                <th>City</th>
                <th>State</th>
                <th>Zip</th>
                <th>Primary Email</th>
                <th>Cell Phone</th>
                <th colspan="3">Actions</th>
            </tr>
            </thead>
            <tbody>
            {% for customer in customers %}
                <tr>
                    <td>{{ customer.cust_number }}</td>
                    <td>{{ customer.name }}</td>
                    <td>{{ customer.address }}</td>
                    <td>{{ customer.city }}</td>
                    <td>{{ customer.state }}</td>
                    <td>{{ customer.zipcode }}</td>
                    <td>{{ customer.email }}</td>
                    <td>{{ customer.cell_phone }}</td>
                    <td><a href="{% url 'customers:customer_edit' %}" class="btn btn-primary">Update</a></td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>
  </body>
    </html>
{% endblock %}

这是我的错误,

NoReverseMatch at /customer/
Reverse for 'customer_edit' with no arguments not found. 1 pattern(s) tried: ['customer/(?P<cust_number>\\d+)/edit/$']
Request Method: GET
Request URL:    http://127.0.0.1:8000/customer/
Django Version: 1.11.1
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'customer_edit' with no arguments not found. 1 pattern(s) tried: ['customer/(?P<cust_number>\\d+)/edit/$']

我尝试了名称空间的试验和错误,但无法解决这个问题。请指导我。感谢。

我正在使用Python - 3.6,Django - 1.11

1 个答案:

答案 0 :(得分:0)

你在观点中做错了

customer.cust_number = request.user   #Why you assign user to cust_number?
customer.updated_date = timezone.now()
customer.save()
return redirect('customer', pk=cust_number)

使用以下内容更新您的观看代码:

from django.core.urlresolvers import reverse

@login_required
def customer_edit(request, cust_number):
    # customer = get_object_or_404(Customer, pk=cust_number)
    if request.method == "POST":
        form = CustomerForm(request.POST)
        # form = CustomerForm(request.CUSTOMER, instance=customer)
        if form.is_valid():
            customer = form.save(commit=False)
            customer.cust_number = request.user.pk
            customer.updated_date = timezone.now()
            customer.save()
            return reverse('customers:customer_edit', request.user.pk)
    else:
        form = CustomerForm()
        return render(request, 'customers/customer_edit.html', {'form': form})

在html中使用

<td><a href="{% url 'customers:customer_edit' cust_number=customer.pk %}" class="btn btn-primary">Update</a></td>