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!
Der Fehler wurde tatsächlich im Zusammenhang mit '' . Hier sollten Sie 'customerDetails.pk' durch' customerDataSet.pk' ersetzen. – Borut
Ja, das stimmt. Es ist die andere Lösung. Du hast den Code korrigiert und den Fehler gelöscht, ohne ihn zu korrigieren :-) – kingbrain