class Application(models.Model):
app_complete = models.BooleanField(default=False)
created_by = models.ForeignKey(User, unique=True)
class Applicant(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
title = models.CharField(max_length=100)
... more fields
class RegistrantForm(forms.ModelForm):
ADDRESS_CHOICES = (('home', 'Home',), ('business', 'Business',))
address_type = forms.ChoiceField(
choices=ADDRESS_CHOICES, widget=forms.Select
)
street2 = forms.CharField(required=False)
cell_phone = forms.CharField(required=False)
fax_phone = forms.CharField(required=False)
class Meta:
model = Applicant
fields = ('first_name', 'last_name', 'title', 'years_at_job', 'street1', 'street2', 'city', 'state', 'zip', 'address_type', 'residence', 'phone', 'cell_phone',
'fax_phone')
exclude = ['created_by'] # Will be taken from the request
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(RegistrantCreate, self).dispatch(*args, **kwargs)
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates blank versions of the form
and its inline formsets.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
application_form = ApplicationFormSet()
return self.render_to_response(
self.get_context_data(form=form,
applicaton_form=application_form))
def post(self, request, *args, **kwargs):
"""
Handles POST requests, instantiating a form instance and its inline
formsets with the passed POST variables and then checking them for
validity.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
if (form.is_valid() and application_form.is_valid() and
application_form.is_valid()):
return self.form_valid(form, application_form)
else:
return self.form_invalid(form, application_form)
def form_valid(self, form, application_form):
"""
Called if all forms are valid. Creates a Recipe instance along with
associated Ingredients and Instructions and then redirects to a
success page.
"""
self.object = form.save(commit=False)
self.object.created_by = self.request.user
self.object = form.save()
application_form.instance = self.object
application_form.save(commit=False)
application_form.instance.created_by = self.request.user
application_form.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, application_form):
"""
Called if a form is invalid. Re-renders the context data with the
data-filled forms and errors.
"""
return self.render_to_response(
self.get_context_data(form=form,
application_form=application_form)
)