更新编辑视图Python Django的问题

时间:2016-05-20 12:40:43

标签: python django python-2.7 django-forms django-views

我无法弄清楚如何让我的update_sheet视图正常工作。无论我尝试什么,我都会在/sheet/61/sheet_update.html上收到此错误TypeError init ()得到了一个意外的关键字参数' instance' 。我希望能够单击edit_sheet链接并编辑工作表值。任何帮助将不胜感激!

这是我的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 %} 

这是我的sheet_update.html

<!DOCTYPE html> 
    <html> 
        <head> 

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

1 个答案:

答案 0 :(得分:2)

标准表单类不接受实例参数。 (请注意,他们也没有注意到内部的Meta类。)

你需要一个ModelForm。