Reputation: 425
I can't figure out how to get my update_sheet view to work correctly. No matter what I try I keep getting this error TypeError at /sheet/61/sheet_update.html init() got an unexpected keyword argument 'instance' . I wan to be able to click on the edit_sheet link and edit the sheet values. Any help will be greatly appreciated!
Here is my views.py (the sheet_form_create works great now I want to be able to update a sheet)
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',
})
Here is my forms.py """ Definition of forms. """
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'),
Here is my 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 %}
Here is my 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>
Upvotes: 0
Views: 36
Reputation: 599610
Standard Form classes do not take an instance parameter. (And note that they take no notice of the inner Meta class, as well.)
You need a ModelForm.
Upvotes: 2