app/soc/views/models/base.py
changeset 459 2cfcedaf7c16
parent 458 e836e8914c8e
child 471 dcb1f7821b39
equal deleted inserted replaced
458:e836e8914c8e 459:2cfcedaf7c16
   201       form = params['create_form'](request.POST)
   201       form = params['create_form'](request.POST)
   202 
   202 
   203     if not form.is_valid():
   203     if not form.is_valid():
   204       return self._constructResponse(request, entity, context, form, params)
   204       return self._constructResponse(request, entity, context, form, params)
   205 
   205 
   206     fields = self.collectCleanedFields(form)
   206     key_name, fields = self.collectCleanedFields(form)
   207 
   207 
   208     # get the old_suffix before editing
   208     # get the old_suffix before editing
   209     old_suffix = self._logic.getKeySuffix(entity)
   209     old_suffix = self._logic.getKeySuffix(entity)
   210 
   210 
   211     self._editPost(request, entity, fields)
   211     self._editPost(request, entity, fields)
   212 
   212 
   213     key_fields = self._logic.getKeyFieldsFromDict(fields)
   213     if not key_name:
   214     entity = self._logic.updateOrCreateFromFields(fields, key_fields)
   214       key_fields =  self._logic.getKeyFieldsFromDict(fields)
       
   215       key_name = self._logic.getKeyNameForFields(key_fields)
       
   216 
       
   217     entity = self._logic.updateOrCreateFromKeyName(fields, key_name)
   215 
   218 
   216     if not entity:
   219     if not entity:
   217       return http.HttpResponseRedirect('/')
   220       return http.HttpResponseRedirect('/')
   218 
   221 
   219     page_params = params['edit_params']
   222     page_params = params['edit_params']
   245           request, self.DEF_SUBMIT_MSG_PARAM_NAME,
   248           request, self.DEF_SUBMIT_MSG_PARAM_NAME,
   246           values=params['save_message'])
   249           values=params['save_message'])
   247 
   250 
   248       # populate form with the existing entity
   251       # populate form with the existing entity
   249       form = params['edit_form'](instance=entity)
   252       form = params['edit_form'](instance=entity)
       
   253       if 'key_name' in form.fields:
       
   254         form.fields['key_name'].initial = entity.key().name()
   250       self._editGet(request, entity, form)
   255       self._editGet(request, entity, form)
   251     else:
   256     else:
   252       form = params['create_form']()
   257       form = params['create_form']()
   253 
   258 
   254     return self._constructResponse(request, entity, context, form, params)
   259     return self._constructResponse(request, entity, context, form, params)
   430 
   435 
   431     for check in self._rights[access_type]:
   436     for check in self._rights[access_type]:
   432       check(request)
   437       check(request)
   433 
   438 
   434   def collectCleanedFields(self, form):
   439   def collectCleanedFields(self, form):
   435     """Collects all cleaned fields from form and returns them 
   440     """Collects all cleaned fields and returns them with the key_name
   436 
   441 
   437     Args:
   442     Args:
   438       form: The form from which the cleaned fields should be collected
   443       form: The form from which the cleaned fields should be collected
   439     """
   444     """
   440 
   445 
   441     fields = {}
   446     fields = {}
       
   447 
       
   448     key_name = None
       
   449     if 'key_name' in form.cleaned_data:
       
   450       key_name = form.cleaned_data.pop('key_name')
   442 
   451 
   443     for field, value in form.cleaned_data.iteritems():
   452     for field, value in form.cleaned_data.iteritems():
   444       fields[field] = value
   453       fields[field] = value
   445 
   454 
   446     return fields
   455     return key_name, fields