2017-11-17 2 views
0

Ich versuche eine ziemlich einfache Sache. Ich habe eine Datenbank mit Kunden. Jetzt baue ich eine Website, wo ich einen der Kunden auswähle und die Informationen darüber editiere. Genau wie auf den Admin-Seiten, wo Sie eine Ihrer 'Ansichten' auswählen und die Werte ändern können.Django: Bearbeiten als Dataset wie in Admin-Site; Fehler

Leider mache ich irgendwo einen Fehler.

Hier mein Code:

urls.py

from django.conf.urls import url 
from django.contrib import admin 

from Customer import views 

urlpatterns = [ 
    url(r'^$', views.home, name='home'), 
    url(r'^customerDetails/(?P<pk>\d+)/$', views.customer_details, name='customer_details'), 
    url(r'^customerDetails/(?P<pk>\d+)/edit/$', views.edit_customer, name='edit_customer'), 
    url(r'^admin/', admin.site.urls), 
] 

views.py

def home(request): 
    customers = Customer.objects.all() 
    return render(request, 'home.html', {'customers': customers}) 

def customer_details(request, pk): 
    customerDetails = get_object_or_404(Customer, pk=pk) 
    return render(request, 'customerDetails.html', {'customerDetails': customerDetails}) 

def edit_customer(request, pk): 
    user = User.objects.first() 
    customerDataSet = get_object_or_404(Customer, pk=pk) 
    if request.method == 'POST': 
     form = EditCustomerForm(request.POST, instance=customerDataSet) 
     if form.is_valid(): 
      form.save() 
      return redirect('customer_details', pk=customerDataSet.pk) 
    else: 
     form = EditCustomerForm(instance=customerDataSet) 

    return render(request, 'edit_customer.html', {'customerDataSet': customerDataSet, 'form': form}) 

modely.py

class Customer(models.Model): 
    someId = models.IntegerField() 
    customerName = models.CharField(max_length=50) 
#with some more fields 
class customerDetails(models.Model): 
    customerName = models.CharField(max_length=50) 
#with some more fields 

formy.py

from django import forms 
from .models import Customer 

class EditCustomerForm(forms.ModelForm): 

    class Meta: 
     model = Customer 
     fields = ['someId', 'customerName'] 

edit_customer.html

{% extends 'base.html' %} 

{% block title %}Edit a customer{% endblock %} 

{% block breadcrumb %} 
    <li class="breadcrumb-item"><a href="{% url 'home' %}">Customer</a></li> 
    <li class="breadcrumb-item"><a href="{% url 'customer_details' customerDetails.pk %}">{{ customerDetails.customerName }}</a></li> 
    <li class="breadcrumb-item active">Edit customer</li> 
{% endblock %} 

{% block content %} 
<form method="post"> 
    {% csrf_token %} 
    {{form.as_p}} 
    <button type="submit" class="btn btn-success">Post</button> 
    </form> 

{% endblock %} 

ich den Fehler bekam:

Exception Type: NoReverseMatch 
Exception Value: Reverse for 'customer_details' with arguments '('',)' not found. 1 pattern(s) tried: ['customerDetails/(?P<pk>\\d+)/$'] 

Können Sie mir helfen, meinen die Fehler zu finden im, Code.

Vielen Dank im Voraus!

Antwort

0

Ich habe die Antwort bekommen. Mein edit_customer.html war falsch.

Die Linie:

<li class="breadcrumb-item"><a href="{% url 'customer_details' customerDetails.pk %}">{{ customerDetails.customerName }}</a></li> 

sollte stattdessen sein:

<li class="breadcrumb-item">{{ customerDataSet.customerName }}</li> 
+0

Ja, das stimmt. Es ist die andere Lösung. Du hast den Code korrigiert und den Fehler gelöscht, ohne ihn zu korrigieren :-) – kingbrain

Verwandte Themen