2017-07-12 6 views
0

i in django einen Anfänger bin,Datenbank-Update Werte django

, so habe ich ein Modell in models.py gemacht und wollte die Datenbank aktualisieren, wenn jemand auf der Reihe durch die ID der Zeile klickt. Hier sind alle meine files.edit_vendor() fehlen 1 benötigt positional Argument: 'ID'. Wie die ID der Zeile und Anzeige auf der nächsten Update-Seite und Update-Werte in der Datenbank zu übernehmen

urls.py

from django.conf.urls import url,include 
from . import views 
from django.contrib.auth.views import login 
urlpatterns = [ 
    url(r'^',views.get_contract, name='contract'), 
    url(r'^update/', views.edit_vendor,name='update'), 
    ] 

views.py

from django.shortcuts import render 
from .models import vendor,vendorForm 
from django.http import HttpResponse,HttpResponseRedirect 
from django.views.generic import UpdateView 

# Create your views here. 
def get_contract(request): 
    # if this is a POST request we need to process the form data 
    form_class = vendorForm 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form=form_class(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      party_name = form.cleaned_data['party_name'] 
      contact_person = form.cleaned_data['contact_person'] 
      phone_no = form.cleaned_data['phone_no'] 
      email = form.cleaned_data['email'] 
      material_description = form.cleaned_data['material_description'] 
      type_of_person = form.cleaned_data['type_of_person'] 
      type_of_dealer = form.cleaned_data['type_of_dealer'] 
      message = form.cleaned_data['message'] 
      form.save() 
     else: 
     # In reality we'd use a form class 
     # to get proper validation errors. 
      return HttpResponse('Make sure all fields are entered and valid.') 

     return HttpResponseRedirect('contract') 

    else: 
     form = vendorForm() 


    vendors = vendor.objects.all() 
    return render(request,'vendors/contract.html',{'vendors': vendors,'form':form,}) 




def edit_vendor(request,id): 
    if request.POST: 
     vendor_form = vendorForm(request.POST) 

     if vendor_form.is_valid(): 
      self.model, 
      vendor = vendor.objects.get(id) 
      vendor_form = vendorForm(request.POST, instance =vendor) 
      vendor_form.save() 
     else: 
      vendor = vendor.objects.get(id)  
      vendor_form = vendorForm(instance=vendor) 

      return render_to_response('vendors/update.html',{ 'form':form }, context_instance=RequestContext(request)) 

Models.py

from django.db import models 
from django.forms import ModelForm 
from django.core.urlresolvers import reverse_lazy 

# Create your models here. 
class vendor(models.Model): 
    VENDOR = 'VR' 
    CONTRACTOR = 'CO' 
    type_of_choices = (
     (VENDOR, 'Vendor'), 
     (CONTRACTOR, 'Contractor'),) 

    MANUFACTURER = 'MR' 
    DEALER = 'DR' 
    type_of_making = (
     (MANUFACTURER, 'Manufacturer'), 
     (DEALER, 'Dealer'),)  

    party_name = models.CharField(max_length=31) 
    contact_person = models.CharField(max_length=100) 
    phone_no =models.CharField(max_length=100) 
    email =models.CharField(max_length=100) 
    material_description =models.CharField(max_length=100) 
    type_of_person= models.CharField(
     max_length=2, 
     choices=type_of_choices, 
     default=VENDOR, 
    ) 
    type_of_dealer= models.CharField(
     max_length=2, 
     choices=type_of_making, 
     default=DEALER, 
    ) 
    message =models.CharField(max_length=100) 
    edithere =models.CharField(max_length=100) 




class vendorForm(ModelForm): 
    class Meta: 
     model =vendor 
     fields = ['party_name', 'contact_person', 'phone_no','email','material_description','type_of_person','type_of_dealer','message','id'] 

Update.html

!DOCTYPE html> 
<html lang="en"> 





<head> 

</head> 




<body class="body"> 
     {% block content %} 

<form method="POST"> 
    {% csrf_token %} 
    {{ form.as_table }} 
     <button type="submit" style=" 
    background-color: #4CAF50; /* Green */ 
    display: block; 
    color: white; 
    text-align: center; 
    text-decoration: none; 
    font-size: 16px; 
">ADD</button> 
</form> 

     {% endblock %} 
</body> 

</html> 
+3

so, was das Problem ist jetzt ??? ? – Exprator

Antwort

0

Sie müssen ein Schlüsselwortargument in Ihrer url für edit_vendor Ansicht erfassen. Versuchen Sie, so etwas in Ihrem urls.py,

url(r'^update/(?P<id>[\d]+)/$', views.edit_vendor,name='update'), 

Auch vergessen Sie nicht, dass es in der URL zu übergeben, wenn in der Vorlage Aufruf

{% url 'update' row_item.id %} 
Verwandte Themen