app/soc/views/models/base.py
changeset 490 7cfa2ad62944
parent 482 839740b061ad
child 492 4abdeedfc08e
equal deleted inserted replaced
489:35fbec27f6cb 490:7cfa2ad62944
   138       params: a dict with params for this View
   138       params: a dict with params for this View
   139       kwargs: not used for create()
   139       kwargs: not used for create()
   140     """
   140     """
   141 
   141 
   142     # Create page is an edit page with no key fields
   142     # Create page is an edit page with no key fields
   143     kwargs = {}
   143     empty_kwargs = {}
   144     fields = self._logic.getKeyFieldNames()
   144     fields = self._logic.getKeyFieldNames()
   145     for field in fields:
   145     for field in fields:
   146       kwargs[field] = None
   146       empty_kwargs[field] = None
   147 
   147 
   148     request.path = helper.requests.replaceSuffix(request.path,
   148     request.path = helper.requests.replaceSuffix(request.path,
   149                                                  old_suffix='create')
   149                                                  old_suffix='create')
   150     request.path = helper.requests.replaceSuffix(request.path,
   150     request.path = helper.requests.replaceSuffix(request.path,
   151                                                  old_suffix='edit',
   151                                                  old_suffix='edit',
   152                                                  new_suffix='edit')
   152                                                  new_suffix='edit')
   153 
   153 
   154     return self.edit(request, page_name=page_name, params=params, **kwargs)
   154     if not kwargs:
   155 
   155       return self.edit(request, page_name=page_name, params=params, **empty_kwargs)
   156   def edit(self, request, page_name=None, params=None, **kwargs):
   156     else:
       
   157       return self.edit(request, page_name=page_name, params=params, seed=kwargs)
       
   158 
       
   159   def edit(self, request, page_name=None, params=None, seed=None, **kwargs):
   157     """Displays the edit page for the entity specified by **kwargs
   160     """Displays the edit page for the entity specified by **kwargs
   158 
   161 
   159     Args:
   162     Args:
   160       request: the standard Django HTTP request object
   163       request: the standard Django HTTP request object
   161       page: a soc.logic.site.page.Page object which is abstraction
   164       page: a soc.logic.site.page.Page object which is abstraction
   178     try:
   181     try:
   179       if all(kwargs.values()):
   182       if all(kwargs.values()):
   180         key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   183         key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   181         entity = self._logic.getIfFields(key_fields)
   184         entity = self._logic.getIfFields(key_fields)
   182     except soc.logic.out_of_band.ErrorResponse, error:
   185     except soc.logic.out_of_band.ErrorResponse, error:
   183       template = params['public_template']
   186       if not seed:
   184       error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
   187         template = params['public_template']
   185           'entity_type_lower' : params['name'].lower(),
   188         error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
   186           'entity_type' : params['name'],
   189             'entity_type_lower' : params['name'].lower(),
   187           'create' : params['create_redirect']
   190             'entity_type' : params['name'],
   188           }
   191             'create' : params['create_redirect']
   189       return simple.errorResponse(request, page_name, error, template, context)
   192             }
       
   193         return simple.errorResponse(request, page_name, error, template, context)
   190 
   194 
   191     if request.method == 'POST':
   195     if request.method == 'POST':
   192       return self.editPost(request, entity, context, params=params)
   196       return self.editPost(request, entity, context, params)
   193     else:
   197     else:
   194       return self.editGet(request, entity, context, params=params)
   198       return self.editGet(request, entity, context, seed, params)
   195 
   199 
   196   def editPost(self, request, entity, context, params=None):
   200   def editPost(self, request, entity, context, params):
   197     """Same as edit, but on POST
   201     """Same as edit, but on POST
   198     """
   202     """
   199 
   203 
   200     params = dicts.merge(params, self._params)
   204     params = dicts.merge(params, self._params)
   201 
   205 
   230     # (causes 'Profile saved' message to be displayed)
   234     # (causes 'Profile saved' message to be displayed)
   231     return helper.responses.redirectToChangedSuffix(
   235     return helper.responses.redirectToChangedSuffix(
   232         request, old_suffix, suffix,
   236         request, old_suffix, suffix,
   233         params=page_params)
   237         params=page_params)
   234 
   238 
   235   def editGet(self, request, entity, context, params=None):
   239   def editGet(self, request, entity, context, seed, params):
   236     """Same as edit, but on GET
   240     """Same as edit, but on GET
   237     """
   241     """
   238 
   242 
   239     params = dicts.merge(params, self._params)
   243     params = dicts.merge(params, self._params)
   240     suffix = self._logic.getKeySuffix(entity)
   244     suffix = self._logic.getKeySuffix(entity)
   256       form = params['edit_form'](instance=entity)
   260       form = params['edit_form'](instance=entity)
   257       if 'key_name' in form.fields:
   261       if 'key_name' in form.fields:
   258         form.fields['key_name'].initial = entity.key().name()
   262         form.fields['key_name'].initial = entity.key().name()
   259       self._editGet(request, entity, form)
   263       self._editGet(request, entity, form)
   260     else:
   264     else:
   261       form = params['create_form']()
   265       if seed:
       
   266         form = params['create_form'](initial=seed)
       
   267       else:
       
   268         form = params['create_form']()
   262 
   269 
   263     return self._constructResponse(request, entity, context, form, params)
   270     return self._constructResponse(request, entity, context, form, params)
   264 
   271 
   265   def list(self, request, page_name=None, params=None):
   272   def list(self, request, page_name=None, params=None):
   266     """Displays the list page for the entity type
   273     """Displays the list page for the entity type