# HG changeset patch # User Sverre Rabbelier # Date 1226858370 0 # Node ID 7cfa2ad62944601d5226ce18d07734077308248c # Parent 35fbec27f6cba86accae09b6afb41d72705f3843 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. diff -r 35fbec27f6cb -r 7cfa2ad62944 app/soc/views/models/base.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) diff -r 35fbec27f6cb -r 7cfa2ad62944 app/soc/views/models/site_settings.py --- 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()