Uso de formularios modelo Django + asistente de formularios + Crujiente - No continúa con el segundo paso
Soy bastante nuevo en los formularios en django.
Mi problema es que tengo algunos modelos muy grandes que tengo que dividir en una serie de formularios más pequeños para que los usuarios completen.
Así que he estado jugando con formas crujientes y ayer, después de ver el tutorial de Mike Hibberts (tutorial 19 de Python Django - Uso del asistente de formularios) en YouTube, quería ver si podía hacer que esto funcionara con una forma crujiente.
Todo parece estar bien para mí, sin embargo, cuando presiono enviar, el formulario parece estar validado pero no continúa con el paso 2.
¿Estoy haciendo esto completamente mal?
¡Gracias por cualquier ayuda o sugerencia!
formas.py
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, ButtonHolder
from crispy_forms.bootstrap import StrictButton
from models import ProcessSheet
class EnterData(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EnterData, self).__init__(*args, **kwargs)
# If you pass FormHelper constructor a form instance
# It builds a default layout with all its fields
self.helper = FormHelper(self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'text-center col-lg-4'
self.helper.field_class = 'col-lg-8'
self.helper.layout.append(Submit('save', 'save'))
"""
self.helper.layout = Layout(
'sheet_id',
'sheet_title',
'part_name',
ButtonHolder('save', css_class='btn-warning'),
)
# You can dynamically adjust your layout
"""
class Meta:
model = ProcessSheet
fields = "__all__"
class Sheet1(forms.ModelForm):
def __init__(self, *args, **kwargs):
print "sheet 1 init!!!!!!!!!!!!!!!"
super(Sheet1, self).__init__(*args, **kwargs)
# If you pass FormHelper constructor a form instance
# It builds a default layout with all its fields
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'text-center col-lg-4'
self.helper.field_class = 'col-lg-8'
self.helper.layout = Layout(
'sheet_id',
'sheet_title',
'part_name',
)
class Meta:
model = ProcessSheet
fields = "__all__"
class Sheet2(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(Sheet2, self).__init__(*args, **kwargs)
# If you pass FormHelper constructor a form instance
# It builds a default layout with all its fields
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'text-center col-lg-4'
self.helper.field_class = 'col-lg-8'
self.helper.layout = Layout(
'cooling',
'nozzle',
'zone_5',
)
class Meta:
model = ProcessSheet
fields = "__all__"
views.py
from django.shortcuts import render_to_response, RequestContext
from process_forms.models import ProcessSheet
from django.contrib.formtools.wizard.views import SessionWizardView
import logging
logr = logging.getLogger(__name__)
from forms import EnterData
# Create your views here.
def SheetSelect(request):
logr.debug( "IM IN SELECT!!!!!!!!!!!!" )
print "IM IN SELECT!!!!!!!!!!!!"
form = EnterData(request.POST or None)
log_data_message = "Please Enter Some Data"
if form.is_valid():
data = form.cleaned_data
if not ProcessSheet.objects.filter(sheet_id=data['sheet_id']):
save_it = form.save(commit=False)
save_it.save()
form = EnterData()
log_data_message = "Data Entered Ok!"
else:
log_data_message = "Sheet ID already exists!"
sheets = ProcessSheet.objects.all()
return render_to_response('PS14.html',
locals(),
context_instance=RequestContext(request))
def SheetFocus(request, sheet_id=0):
sheet = ProcessSheet.objects.get(id=sheet_id)
return render_to_response('PS24.html',
locals(),
context_instance=RequestContext(request))
class SheetWizard(SessionWizardView ):
logr.debug( "IM IN WIZARD!!!!!!!!!!!!" )
template_name = "sheet_form.html"
def done(self, form_list, **kwargs):
logr.debug( "IM IN DONE!!!!!!!!!!!!" )
form_data = process_form_data(form_list)
return render_to_response('done.html', {'form_data': form_data})
def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]
logr.debug( "DONE PROCESS FORM DATA!!!!!!!!!!!!" )
return form_data
urls.py
from django.conf.urls import patterns, include, url
from process_forms.forms import Sheet1, Sheet2
from process_forms.views import SheetWizard
urlpatterns = patterns('',
url(r'^all/', 'process_forms.views.SheetSelect'),
url(r'^get/(?P<sheet_id>\d+)/', 'process_forms.views.SheetFocus'),
url(r'^entry/', SheetWizard.as_view([Sheet1,Sheet2])),
)
modelos.py
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
# Create your models here.
class ProcessSheet(models.Model):
ejector_confirmation_on = models.BooleanField(default=True)
number_of_cavities = models.IntegerField(blank=True, null=True,validators=[
MaxValueValidator(100),
MinValueValidator(1)
])
date = models.IntegerField(blank=True, null=True)
shift = models.IntegerField(blank=True, null=True,validators=[
MaxValueValidator(4),
MinValueValidator(1)
])
sheet_desc = models.TextField(blank=True, null=True)
comment = models.TextField(blank=True, null=True)
sheet_id = models.CharField(max_length=16, blank=False,null=True)
sheet_title = models.CharField(max_length=24, blank=False,null=True)
part_number = models.CharField(max_length=16, blank=False,null=True)
part_name = models.CharField(max_length=16, blank=True, null=True)
machine_no = models.CharField(max_length=16, blank=True, null=True)
special_notes = models.CharField(max_length=256,blank=True, null=True)
end_of_arm_tool_number = models.CharField(max_length=16, blank=True, null=True)
program_picker_robot = models.CharField(max_length=16, blank=True, null=True)
nozzle_tip_size = models.CharField(max_length=16, blank=True, null=True)
k_cut = models.BooleanField(default=False)
hydraulic_unit_pressure = models.CharField(max_length=16, blank=True, null=True)
valve_gate = models.CharField(max_length=16, blank=True, null=True)
colorant = models.CharField(max_length=16, blank=True, null=True)
reasons_for_changes = models.CharField(max_length=16, blank=True, null=True)
finger_print = models.CharField(max_length=16, blank=True, null=True)
initial = models.CharField(max_length=16, blank=True, null=True)
V1 = models.FloatField(blank=True, null=True)
V2 = models.FloatField(blank=True, null=True)
V3 = models.FloatField(blank=True, null=True)
V4 = models.FloatField(blank=True, null=True)
V5 = models.FloatField(blank=True, null=True)
position_pressure = models.FloatField(blank=True, null=True)
pack_1 = models.FloatField(blank=True, null=True)
pack_2 = models.FloatField(blank=True, null=True)
pack1 = models.FloatField(blank=True, null=True)
pack2 = models.FloatField(blank=True, null=True)
shot_size = models.FloatField(blank=True, null=True)
back_1 = models.FloatField(blank=True, null=True)
screw_speed = models.FloatField(blank=True, null=True)
cushion_in_inches = models.FloatField(blank=True, null=True)
injection_time = models.FloatField(blank=True, null=True)
cycle_time = models.FloatField(blank=True, null=True)
cooling = models.FloatField(blank=True, null=True)
hot_sprue_1 = models.FloatField(blank=True, null=True)
nozzle = models.FloatField(blank=True, null=True)
zone_1_barrel = models.FloatField(blank=True, null=True)
zone_2_barrel = models.FloatField(blank=True, null=True)
zone_3_barrel = models.FloatField(blank=True, null=True)
mold = models.FloatField(blank=True, null=True)
dryer = models.FloatField(blank=True, null=True)
zone_1 = models.FloatField(blank=True, null=True)
zone_2 = models.FloatField(blank=True, null=True)
zone_3 = models.FloatField(blank=True, null=True)
zone_4 = models.FloatField(blank=True, null=True)
zone_5 = models.FloatField(blank=True, null=True)
zone_6 = models.FloatField(blank=True, null=True)
zone_7 = models.FloatField(blank=True, null=True)
zone_8 = models.FloatField(blank=True, null=True)
zone_9 = models.FloatField(blank=True, null=True)
zone_10 = models.FloatField(blank=True, null=True)
zone_11 = models.FloatField(blank=True, null=True)
zone_12 = models.FloatField(blank=True, null=True)
flowmeter_reading = models.FloatField(blank=True, null=True)
def Meta():
managed = True
sheet_form.html
{% extends "base.html" %}
{% block content %}
<H1> This is the entry form </H1>
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<br>
{{log_data_message}}
<form action="/sheets/entry/" method="post">
{{ wizard.management_form }}
{% load crispy_forms_tags %}
{% crispy wizard.form %}
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">"first step"</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">"prev step"</button>
{% endif %}
<input type="submit" value="Submit" />
</form>
{% endblock %}
{% block links %}
{% for sheet in sheets %}
<a HREF="/sheets/get/{{ sheet.id }}">{{sheet.sheet_title}}</a>
<br>
{% endfor %}
{% endblock %}
<br>
¡¡¡Que tengas un gran día!!!