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 |