def dynaform_form(context, form_slug, success_url, form_template=None, *args, **kwargs): """ Genera e instancia el formulario según el `slug`. Si no existe devuelve un comentario `HTML` informando que no se encontró. Para determinar la dirección de éxito hay que pasar la url en el argumento `success_url` que es obligatorio. {% dynaform_form form_slug='contact' success_url='/contact/done/' as form %} Para que el formulario haga el render en un template especifico se puede pasar en el argumento `form_template` pero es una opción totan sabiendo que se pueden cargar directamente desde dynaform/dynaformtemplate. Este `templatetag` también genera una variable `form_title` en el `context` donde guarda el título del formulario, el que es cargado desde el admin. """ try: object_form = DynaFormForm.objects.get_for_lang().get(slug=form_slug, is_active=True) except DynaFormForm.DoesNotExist: return {mark_safe('<!-- DynaFormForm %s DoesNotExist -->' % form_slug):[]} request = context['request'] obj = context.get('object', None) if obj: ct = ContentType.objects.get_for_model(obj) # Si es POST y no valido el form, vuelve a hacer el render pero mostrando los errores if request.method == "POST": form = DynaFormClassForm(data=request.POST, files=request.FILES, request=request, object_form=object_form, context=context, success_url=success_url) else: form = DynaFormClassForm(request=request, object_form=object_form, context=context, success_url=success_url) form.action = object_form.get_absolute_url() form.title = object_form.form_title form.object = object_form if form_template: try: template = DynaFormTemplate.objects.get(id=form_template) template = Template(template.html) except DynaFormTemplate.DoesNotExist: return form elif object_form.form_template: template = Template(object_form.form_template.html) else: return form context.update({'form': form, 'form_title': object_form.form_title }) html = template.render(context) return mark_safe(html)
def post(self, request, *args, **kwargs): object_form_pk = request.POST.get('_object_form_pk') url = request.POST.get('_object_form_success_url') if not object_form_pk and not url and getattr(request, 'session', False): DYNAFORM = request.session.get(DYNAFORM_SESSION_KEY, False) if DYNAFORM and DYNAFORM.has_key('pk'): object_form_pk = DYNAFORM['pk'] url = DYNAFORM.get('success_url', False) context = Context() try: form_object = DynaFormForm.objects.get(pk=object_form_pk) form = DynaFormClassForm( data=request.POST, files=request.FILES, request=request, context=context, object_form=form_object ) if form.is_valid(): form.save() if url: return HttpResponseRedirect(url) print 'post process', form.errors except DynaFormForm.DoesNotExist: raise Http404 # Fallback resolution order: POST, GET, dispatch superClass = super(DynaformMixin, self) if hasattr(superClass, 'post'): return superClass.post(request, *args, **kwargs) if hasattr(superClass, 'get'): return superClass.get(request, *args, **kwargs) return superClass.dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs): object_form_pk = request.POST.get('_object_form_pk') url = request.POST.get('_object_form_success_url') if not object_form_pk and not url and getattr(request, 'session', False): DYNAFORM = request.session.get(DYNAFORM_SESSION_KEY, False) if DYNAFORM and DYNAFORM.has_key('pk'): object_form_pk = DYNAFORM['pk'] url = DYNAFORM.get('success_url', False) context = Context() try: form_object = DynaFormForm.objects.get(pk=object_form_pk) form = DynaFormClassForm(data=request.POST, files=request.FILES, request=request, context=context, object_form=form_object) if form.is_valid(): form.save() if url: return HttpResponseRedirect(url) print 'post process', form.errors except DynaFormForm.DoesNotExist: raise Http404 # Fallback resolution order: POST, GET, dispatch superClass = super(DynaformMixin, self) if hasattr(superClass, 'post'): return superClass.post(request, *args, **kwargs) if hasattr(superClass, 'get'): return superClass.get(request, *args, **kwargs) return superClass.dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs): context = Context() form_object = self.get_object() form = DynaFormClassForm(data=request.POST, files=request.FILES, \ request=request, context=context, object_form=form_object) if form.is_valid(): form.save() # si es por ajax devuelve OK return HttpResponse(json.dumps({ 'status': 'ok', 'dt': form.dt.pk, 'code':200 }), content_type='application/json') return HttpResponseBadRequest(json.dumps({ 'status': 'error', 'code': 400, 'errors': form.errors }), content_type='application/json')
def post(self, request, *args, **kwargs): context = Context() form_object = self.get_object() form = DynaFormClassForm(data=request.POST, files=request.FILES, \ request=request, context=context, object_form=form_object) if form.is_valid(): form.save() # si es por ajax devuelve OK return HttpResponse(json.dumps({ 'status': 'ok', 'dt': form.dt.pk, 'code': 200 }), content_type='application/json') return HttpResponseBadRequest(json.dumps({ 'status': 'error', 'code': 400, 'errors': form.errors }), content_type='application/json')
def dynaform_form(context, form_slug, success_url, form_template=None, *args, **kwargs): """ Genera e instancia el formulario según el `slug`. Si no existe devuelve un comentario `HTML` informando que no se encontró. Para determinar la dirección de éxito hay que pasar la url en el argumento `success_url` que es obligatorio. {% dynaform_form form_slug='contact' success_url='/contact/done/' as form %} Para que el formulario haga el render en un template especifico se puede pasar en el argumento `form_template` pero es una opción totan sabiendo que se pueden cargar directamente desde dynaform/dynaformtemplate. Este `templatetag` también genera una variable `form_title` en el `context` donde guarda el título del formulario, el que es cargado desde el admin. """ try: object_form = DynaFormForm.objects.get_for_lang().get(slug=form_slug, is_active=True) except DynaFormForm.DoesNotExist: return { mark_safe('<!-- DynaFormForm %s DoesNotExist -->' % form_slug): [] } request = context['request'] obj = context.get('object', None) if obj: ct = ContentType.objects.get_for_model(obj) # Si es POST y no valido el form, vuelve a hacer el render pero mostrando los errores if request.method == "POST": form = DynaFormClassForm(data=request.POST, files=request.FILES, request=request, object_form=object_form, context=context, success_url=success_url) else: form = DynaFormClassForm(request=request, object_form=object_form, context=context, success_url=success_url) form.action = object_form.get_absolute_url() form.title = object_form.form_title form.object = object_form if form_template: try: template = DynaFormTemplate.objects.get(id=form_template) template = Template(template.html) except DynaFormTemplate.DoesNotExist: return form elif object_form.form_template: template = Template(object_form.form_template.html) else: return form context.update({'form': form, 'form_title': object_form.form_title}) html = template.render(context) return mark_safe(html)