Allow pre-seeding a create form
authorSverre Rabbelier <srabbelier@gmail.com>
Sun, 16 Nov 2008 17:59:30 +0000
changeset 490 7cfa2ad62944
parent 489 35fbec27f6cb
child 491 e13da520d063
Allow pre-seeding a create form With this feature the Site Settings create form can be pre-seeded with it's "magic values", which allows those fields to be hidden from the user. At the same time, it allows 'Edit Main Site Settings' to either create or edit the Main Site Settings.
app/soc/views/models/base.py
app/soc/views/models/site_settings.py
--- a/app/soc/views/models/base.py	Sun Nov 16 15:51:19 2008 +0000
+++ b/app/soc/views/models/base.py	Sun Nov 16 17:59:30 2008 +0000
@@ -140,10 +140,10 @@
     """
 
     # Create page is an edit page with no key fields
-    kwargs = {}
+    empty_kwargs = {}
     fields = self._logic.getKeyFieldNames()
     for field in fields:
-      kwargs[field] = None
+      empty_kwargs[field] = None
 
     request.path = helper.requests.replaceSuffix(request.path,
                                                  old_suffix='create')
@@ -151,9 +151,12 @@
                                                  old_suffix='edit',
                                                  new_suffix='edit')
 
-    return self.edit(request, page_name=page_name, params=params, **kwargs)
+    if not kwargs:
+      return self.edit(request, page_name=page_name, params=params, **empty_kwargs)
+    else:
+      return self.edit(request, page_name=page_name, params=params, seed=kwargs)
 
-  def edit(self, request, page_name=None, params=None, **kwargs):
+  def edit(self, request, page_name=None, params=None, seed=None, **kwargs):
     """Displays the edit page for the entity specified by **kwargs
 
     Args:
@@ -180,20 +183,21 @@
         key_fields = self._logic.getKeyFieldsFromDict(kwargs)
         entity = self._logic.getIfFields(key_fields)
     except soc.logic.out_of_band.ErrorResponse, error:
-      template = params['public_template']
-      error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
-          'entity_type_lower' : params['name'].lower(),
-          'entity_type' : params['name'],
-          'create' : params['create_redirect']
-          }
-      return simple.errorResponse(request, page_name, error, template, context)
+      if not seed:
+        template = params['public_template']
+        error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
+            'entity_type_lower' : params['name'].lower(),
+            'entity_type' : params['name'],
+            'create' : params['create_redirect']
+            }
+        return simple.errorResponse(request, page_name, error, template, context)
 
     if request.method == 'POST':
-      return self.editPost(request, entity, context, params=params)
+      return self.editPost(request, entity, context, params)
     else:
-      return self.editGet(request, entity, context, params=params)
+      return self.editGet(request, entity, context, seed, params)
 
-  def editPost(self, request, entity, context, params=None):
+  def editPost(self, request, entity, context, params):
     """Same as edit, but on POST
     """
 
@@ -232,7 +236,7 @@
         request, old_suffix, suffix,
         params=page_params)
 
-  def editGet(self, request, entity, context, params=None):
+  def editGet(self, request, entity, context, seed, params):
     """Same as edit, but on GET
     """
 
@@ -258,7 +262,10 @@
         form.fields['key_name'].initial = entity.key().name()
       self._editGet(request, entity, form)
     else:
-      form = params['create_form']()
+      if seed:
+        form = params['create_form'](initial=seed)
+      else:
+        form = params['create_form']()
 
     return self._constructResponse(request, entity, context, form, params)
 
--- a/app/soc/views/models/site_settings.py	Sun Nov 16 15:51:19 2008 +0000
+++ b/app/soc/views/models/site_settings.py	Sun Nov 16 17:59:30 2008 +0000
@@ -52,7 +52,11 @@
     model = soc.models.site_settings.SiteSettings
 
     #: list of model fields which will *not* be gathered by the form
-    exclude = ['inheritance_line', 'home']
+    exclude = ['inheritance_line', 'home', 'partial_path', 'link_name']
+
+  partial_path = forms.CharField(widget=forms.HiddenInput)
+
+  link_name = forms.CharField(widget=forms.HiddenInput)
 
 
 class EditForm(CreateForm):
@@ -130,7 +134,7 @@
     values = self._logic.getMainKeyValues()
     key_values = dicts.zip(keys, values)
 
-    return self.edit(request, page_name, **key_values)
+    return self.edit(request, page_name, seed=key_values, **key_values)
 
 
 view = View()