2016-05-20 3 views
0

update_sheetビューを正しく動作させる方法を理解できません。私が試してみても、私はこのエラーを受けています。TypeErrorは/sheet/61/sheet_update.htmlにあります。 ()は予期せぬキーワード引数 'instance'を持っています。私はedit_sheetリンクをクリックしてシート値を編集できるようにしたいと思います。どんな助けでも大歓迎です!更新の問題編集ビューPython Django

ここにここに私のviews.py(sheet_form_createが今素晴らしい作品、私はシートを更新できるようにしたい)

def sheet(request, customer_id): 
    assert isinstance(request, HttpRequest) 
    sheet = Sheet.objects.filter(customer_id__exact=customer_id) 
    Sheet.objects.redis_save_sheet(sheet) 
    return render( 
     request, 
     'app/sheet.html', 
     { 
      'title':'Current Sheets', 
      'year':datetime.now().year, 
      'sheet': sheet, 
     } 
    ) 

#This is the one I cant get to work.... 

def update_sheet(request, pk=None): 
    obj = get_object_or_404(Sheet, pk=pk) 
    form = SheetForm(request.POST or None, 
         request.FILES or None, instance=obj) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
      return redirect('app/sheet_form_create.html') 
    return render(request, 'app/sheet_update.html', {'form': form}) 


def sheet_form_create(request): 

    if request.method == 'GET': 
     sheet_form = SheetForm() 
    else: 
     sheet_form = SheetForm(request.POST) 
     cust_int = Customer.objects.latest('id').id 
     cust_int_plus = int(cust_int) + 1 
     c_date = datetime.now() 
     u_date = datetime.now() 


     if sheet_form.is_valid(): 

     customer_name = sheet_form.cleaned_data['customer_name'] 
     part_number = sheet_form.cleaned_data['part_number'] 
     part_revision = sheet_form.cleaned_data['part_revision'] 
     work_order = sheet_form.cleaned_data['work_order'] 
     purchase_order = sheet_form.cleaned_data['purchase_order'] 
     sample_size = sheet_form.cleaned_data['sample_size'] 
     sample_scheme = sheet_form.cleaned_data['sample_scheme'] 
     overide_scheme = sheet_form.cleaned_data['overide_scheme'] 
     template = sheet_form.cleaned_data['template'] 
     sample_scheme_type = sheet_form.cleaned_data['sample_scheme_type'] 
     sample_schem_percent = sheet_form.cleaned_data['sample_schem_percent'] 
     critical_dimensions = sheet_form.cleaned_data['critical_dimensions'] 
     closed = sheet_form.cleaned_data['closed'] 
     serial_index = sheet_form.cleaned_data['serial_index'] 
     drawing_number = sheet_form.cleaned_data['drawing_number'] 
     drawing_revision = sheet_form.cleaned_data['drawing_revision'] 
     heat_number = sheet_form.cleaned_data['heat_number'] 
     note = sheet_form.cleaned_data['note'] 
     valc = sheet_form.cleaned_data['valc'] 

     try: 
      get_cust = Customer.objects.filter(customer_name=customer_name).exists() 
     except: 
      get_cust = False 
      if get_cust == True: 
      c = Customer.objects.get(customer_name=customer_name) 
      c_id = c.customer_id 
      else: 
      creat_cust = Customer.objects.create(id=cust_int_plus, customer_id=cust_int_plus, customer_name=customer_name) 
      c_minus = cust_int_plus 
      c = Customer.objects.get(id=c_minus) 
      c_id = c.customer_id 

     sheet = Sheet.objects.create( 
      create_date=c_date, 
      updated_date=u_date, 
      customer_name=customer_name, 
      part_number=part_number, 
      part_revision=part_revision, 
      work_order=work_order, 
      purchase_order=purchase_order, 
      sample_size=sample_size, 
      sample_scheme=sample_scheme, 
      overide_scheme=overide_scheme, 
      template=template, 
      sample_scheme_type=sample_scheme_type, 
      sample_schem_percent=sample_schem_percent, 
      critical_dimensions=critical_dimensions, 
      closed=closed, 
      serial_index=serial_index, 
      drawing_number=drawing_number, 
      drawing_revision=drawing_revision, 
      heat_number=heat_number, 
      note=note, 
      valc=valc, 
      customer_id=c_id) 
     return HttpResponseRedirect(reverse('sheet_create')) 
    return render(request, 'app/sheet_form_create.html', { 
     'sheet_form': sheet_form, 
     'title':'New Sheet', 

    }) 

「は」私のforms.py です「形の 定義。 」 ""

from django import forms 

from app.models import Sheet 
from django.contrib.auth.forms import AuthenticationForm 
from django.utils.translation import ugettext_lazy as _ 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Div, Submit, HTML, Button, Row, Field 
from crispy_forms.bootstrap import AppendedText, PrependedText, FormActions 
from parsley.decorators import parsleyfy 


class BootstrapAuthenticationForm(AuthenticationForm): 
    """Authentication form which uses boostrap CSS.""" 
    username = forms.CharField(max_length=254, 
           widget=forms.TextInput({ 
            'class': 'form-control', 
            'placeholder': 'User name'})) 
    password = forms.CharField(label=_("Password"), 
           widget=forms.PasswordInput({ 
            'class': 'form-control', 
            'placeholder':'Password'})) 


@parsleyfy 
class SheetForm(forms.Form): 
    #create_date = forms.DateField() 
    #updated_date = forms.DateField() 
    customer_name = forms.CharField(max_length=255, min_length=1) 
    part_number = forms.CharField(max_length=255, min_length=1) 
    part_revision = forms.CharField(max_length=255, min_length=1) 
    work_order = forms.CharField(max_length=255, min_length=1) 
    purchase_order = forms.CharField(max_length=255, min_length=1) 
    sample_size = forms.IntegerField() 
    sample_scheme = forms.CharField(max_length=255, min_length=1) 
    overide_scheme = forms.IntegerField() 
    template = forms.IntegerField() 
    sample_scheme_type = forms.CharField() 
    sample_schem_percent = forms.IntegerField() 
    critical_dimensions = forms.IntegerField() 
    closed = forms.IntegerField() 
    serial_index = forms.CharField(max_length=255, min_length=1) 
    drawing_number = forms.CharField(max_length=255, min_length=1) 
    drawing_revision = forms.CharField(max_length=255, min_length=1) 
    heat_number = forms.CharField(max_length=255, min_length=1) 
    note = forms.CharField(max_length=255, min_length=1) 
    valc = forms.CharField(max_length=255, min_length=1) 

    class Meta: 
     model = Sheet 
     parsley_namespace = 'parsley' 

    def __init__(self, *args, **kwargs): 
     super(SheetForm, self).__init__(*args, **kwargs) 

     self.helper = FormHelper() 
     self.helper.form_id = 'sheet_new' 
     self.helper.form_class = 'form-horizontal' 
     self.helper.attrs = {'data-parsley-validate': 1} 
     self.helper.layout = Layout( 
      Div( 
       #Div('create_date', css_class='col-md-2'), 
       #Div('updated_date', css_class='col-md-2'), 
       Div('customer_name', css_class='col-md-2'), 
       Div('part_number', css_class='col-md-2'), 
       css_class='row', 
     ), 
      Div( 
       Div('part_revision', css_class='col-md-2'), 
       Div('work_order', css_class='col-md-2'), 
       Div('purchase_order', css_class='col-md-2'), 
       Div('sample_size', css_class='col-md-2'), 
       css_class='row', 
     ), 
      Div( 
       Div('sample_scheme', css_class='col-md-2'), 
       Div('overide_scheme', css_class='col-md-2'), 
       Div('template', css_class='col-md-2'), 
       Div('sample_scheme_type', css_class='col-md-2'), 
       css_class='row', 
     ), 
      Div( 
       Div('sample_schem_percent', css_class='col-md-2'), 
       Div('critical_dimensions', css_class='col-md-2'), 
       Div('closed', css_class='col-md-2'), 
       Div('serial_index', css_class='col-md-2'), 
       css_class='row', 
     ), 
      Div( 
       Div('drawing_number', css_class='col-md-2'), 
       Div('drawing_revision', css_class='col-md-2'), 
       Div('heat_number', css_class='col-md-2'), 
       Div('note', css_class='col-md-2'), 
       css_class='row', 
     ), 
      Div( 
       Div('valc', css_class='col-md-2'), 
       css_class='row', 
     ), 
      HTML('<br> </br>'), 

      FormActions( 
      Submit('save_changes', 'Save Sheet', css_class="btn-primary"), 
      HTML('<a class="btn btn-danger" href={% url "sheet_form_create" %}>Cancel</a>'), 
     ) 
    ) 

urls.py

urlpatterns = [ 

    url(r'^$', app.views.home, name='home'), 
    url(r'^contact$', app.views.contact, name='contact'), 
    url(r'^about', app.views.about, name='about'), 
    #url(r'^sheet', app.views.sheet, name='sheet'), 
    url(r'^sheet/(?P<customer_id>\w+)$', app.views.sheet, name='sheet_customer'), 
    url(r'^sheet/sheet_form_create.html$', app.views.sheet_form_create, name='sheet_form_create'), 
    url(r'^sheet/(?P<pk>\d+)/sheet_update.html$', app.views.update_sheet, name='sheet_update'), 

は、ここに私のsheet.html

{% extends "app/layout.html" %} 

{% block content %} 


<br /> 
<br /> 
<br /> 



<div class="row"> 
    <div> 
     <table class="sheet_table_header"> 
      <tr> 
      <th>Current Workorders</th> 
      <th>Edit</th> 
      <th>Delete</th> 
      </tr> 
     </table> 
     {% for sheet in sheet.all %} 
      <table class="sheet_table"> 
      <tr> 
       <td><a href="{{ sheet_detail_url }}">{{ sheet.work_order }}</a></td> 
       <td><a href="{% url 'sheet_update' pk=sheet.id %}">"Edit"</a></td> 

       <!--<td><a href="/sheet/edit/{{ sheet.pk }}">Edit</a></td>--> 
       <td><a href="/sheet/delete/{{ sheet.pk }}">Delete</a></td> 
      </tr> 
      </table> 
     {% endfor %} 
    </div>  
</div> 


{% endblock %} 

はここ

<!DOCTYPE html> 
    <html> 
     <head> 

     </head> 
     <body> 
     <form action="" method="post">{% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="update" /> 
    </form> 
     </body> 
    </html> 

答えて

2

標準のフォームクラスはインスタンスパラメータを取ることはありません、私のsheet_update.htmlです。 (また、内部のMetaクラスにも気付かないことに注意してください)

ModelFormが必要です。

+0

^yup、彼が言ったこと。 SheetFormは 'FormForm'のサブクラスでなければなりません。 –

+0

それは私がFormからModelFormに変更したものです。ありがとう! @DanielRoseman – Snowman08