app/soc/views/models/base.py
changeset 459 2cfcedaf7c16
parent 458 e836e8914c8e
child 471 dcb1f7821b39
--- a/app/soc/views/models/base.py	Mon Nov 10 00:41:01 2008 +0000
+++ b/app/soc/views/models/base.py	Mon Nov 10 00:41:54 2008 +0000
@@ -203,15 +203,18 @@
     if not form.is_valid():
       return self._constructResponse(request, entity, context, form, params)
 
-    fields = self.collectCleanedFields(form)
+    key_name, fields = self.collectCleanedFields(form)
 
     # get the old_suffix before editing
     old_suffix = self._logic.getKeySuffix(entity)
 
     self._editPost(request, entity, fields)
 
-    key_fields = self._logic.getKeyFieldsFromDict(fields)
-    entity = self._logic.updateOrCreateFromFields(fields, key_fields)
+    if not key_name:
+      key_fields =  self._logic.getKeyFieldsFromDict(fields)
+      key_name = self._logic.getKeyNameForFields(key_fields)
+
+    entity = self._logic.updateOrCreateFromKeyName(fields, key_name)
 
     if not entity:
       return http.HttpResponseRedirect('/')
@@ -247,6 +250,8 @@
 
       # populate form with the existing entity
       form = params['edit_form'](instance=entity)
+      if 'key_name' in form.fields:
+        form.fields['key_name'].initial = entity.key().name()
       self._editGet(request, entity, form)
     else:
       form = params['create_form']()
@@ -432,7 +437,7 @@
       check(request)
 
   def collectCleanedFields(self, form):
-    """Collects all cleaned fields from form and returns them 
+    """Collects all cleaned fields and returns them with the key_name
 
     Args:
       form: The form from which the cleaned fields should be collected
@@ -440,7 +445,11 @@
 
     fields = {}
 
+    key_name = None
+    if 'key_name' in form.cleaned_data:
+      key_name = form.cleaned_data.pop('key_name')
+
     for field, value in form.cleaned_data.iteritems():
       fields[field] = value
 
-    return fields
+    return key_name, fields