Exemple #1
0
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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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')
Exemple #5
0
    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')
Exemple #6
0
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)