changeset 39:bd1cdb15ef85

Added persona form submission validation, fixed some things in model logic; submitting forms successfully now properly redirects the user to an edit page.
author Atul Varma <varmaa@toolness.com>
date Mon, 03 Mar 2008 19:01:43 -0600
parents ccdb8d6379d3
children 748547f73357
files PersonasBackend/personas/models.py PersonasBackend/personas/urls.py PersonasBackend/personas/views.py
diffstat 3 files changed, 23 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/PersonasBackend/personas/models.py	Mon Mar 03 17:13:13 2008 -0600
+++ b/PersonasBackend/personas/models.py	Mon Mar 03 19:01:43 2008 -0600
@@ -98,8 +98,7 @@
 
     description = models.TextField(
         help_text = "HTML is allowed.",
-        # TODO: Really allow blank descriptions?
-        blank=True,
+        blank=False,
         )
 
     header_img = models.URLField(
@@ -107,7 +106,7 @@
         help_text=("URL for the image that will be placed behind "
                    "the browser's top chrome."),
         verify_exists=True,
-        blank=True,
+        blank=False,
         )
 
     footer_img = models.URLField(
@@ -115,7 +114,7 @@
         help_text=("URL for the image that will be placed behind "
                    "the browser's bottom chrome."),
         verify_exists=True,
-        blank=True,
+        blank=False,
         )
 
     MAX_COLOR_SCHEME_LENGTH = 10
--- a/PersonasBackend/personas/urls.py	Mon Mar 03 17:13:13 2008 -0600
+++ b/PersonasBackend/personas/urls.py	Mon Mar 03 19:01:43 2008 -0600
@@ -14,9 +14,11 @@
      {'template_name':'personas/logged_out.html'}),
 
     # Personas UI
-    (r'^new/$',
-     'PersonasBackend.personas.views.edit_view'),
-    (r'^(?P<persona_id>\d+)/edit/$',
-     'PersonasBackend.personas.views.edit_view'),
+    url(r'^new/$',
+        'PersonasBackend.personas.views.edit_view',
+        name='new-persona'),
+    url(r'^(?P<persona_id>\d+)/edit/$',
+        'PersonasBackend.personas.views.edit_view',
+        name='edit-persona'),
     (r'^$', 'PersonasBackend.personas.views.list_view'),
 )
--- a/PersonasBackend/personas/views.py	Mon Mar 03 17:13:13 2008 -0600
+++ b/PersonasBackend/personas/views.py	Mon Mar 03 19:01:43 2008 -0600
@@ -1,6 +1,7 @@
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseRedirect
 from django.template import Context, loader
 from django.contrib.auth.decorators import login_required
+from django.core.urlresolvers import reverse
 
 from PersonasBackend.personas import models
 from PersonasBackend.personas import forms
@@ -10,39 +11,25 @@
     context = Context({ "personas" : models.Persona.objects.all() })
     return HttpResponse( template.render(context) )
 
-def _save_changes( user, formData, persona ):
+def _save_changes( user, formData, persona=None ):
     """
     Save the given changes made by the given user to the given
     persona.  If the given persona is None, then a new one is created.
     """
 
-    if persona:
-        form = forms.PersonaForm( formData,
-                                  instance=persona )
+    form = forms.PersonaForm( formData,
+                              instance=persona )
+    if form.is_valid():
+        newPersona = form.save( commit=False )
+        newPersona.updater = user
+        newPersona.save()
+        url = reverse("edit-persona", args=[newPersona.id])
+        return HttpResponseRedirect( url )
     else:
-        form = forms.PersonaForm( formData )
-    persona = form.save( commit=False )
-    persona.updater = user
-    # TODO: Add validation to ensure that all required fields
-    # are properly filled out.
-    persona.save()
-    # TODO: Redirect user back to editing page or some other
-    # location.
-    return HttpResponse( "Persona saved." )
+        return _show_edit_form( form )
 
-def _show_edit_form( persona ):
-    """
-    Show the edit form for the given persona; if None is supplied,
-    shows an edit form for a new persona.
-    """
-
+def _show_edit_form( form ):
     template = loader.get_template( "personas/edit.html" )
-    if persona:
-        # We're editing an existing persona.
-        form = forms.PersonaForm( instance=persona )
-    else:
-        # We're creating a new persona.
-        form = forms.PersonaForm()
     context = Context({ "form" : form })
     return HttpResponse( template.render(context) )
 
@@ -59,4 +46,4 @@
     if request.method == "POST":
         return _save_changes( request.user, request.POST, persona )
     else:
-        return _show_edit_form( persona )
+        return _show_edit_form( forms.PersonaForm(instance=persona) )