Envío de un formulario Django en un modo Bootstrap

Hola chicos, soy nuevo en Django y estoy tratando de averiguar cómo enviar un formulario dentro de un modal. Tengo dos aplicaciones de Django en cuestión, frontend y login. La aplicación frontend entrega la página, y se supone que el inicio de sesión debe procesar el formulario. Estoy utilizando formularios crujientes para representar los formularios, pero no puedo obtener los formularios para enviar. He estado luchando con esto por unos días. Lea muchas publicaciones sobre esto y todavía no puedo entenderlo. Cualquier ayuda será apreciada grandemente. Muchas gracias. Estoy usando la versión 1.6 de Django

urls.py de la aplicación frontend:

from django.conf.urls import patterns, url from django.contrib import admin from frontend import views from login.views import registration urlpatterns = patterns('', url(r'^$', views.index, name='index'), url(r'^about/$', views.about, name='about'), url(r'^contact/$', views.contact, name='contact'), url(r'^$', 'index', name='index'), url(r'^$',views.registration, name='register'), ) 

views.py de la aplicación frontend:

 from django.template import RequestContext from django.shortcuts import render_to_response from login.forms import RegistrationForm from login.forms import LoginForm from login.views import registration def index(request): return render_to_response('index.html', {'regform':RegistrationForm(),'loginform': LoginForm()} ) def about(request): return render_to_response('about.html') def contact(request): return render_to_response('contact.html') 

urls.py de aplicaciones de inicio de sesión:

 from django.conf.urls import patterns, url from login import views urlpatterns = patterns('', url(r'^register/$', views.registration, name='index.html') ) 

view.py de la aplicación de inicio de sesión:

 from django.template import RequestContext from django.shortcuts import render_to_response from login.forms import RegistrationForm def registration(request): context = RequestContext(request) registered = False if request.method == 'POST': user_form = RegistrationForm(request.POST) user = user_form.save() user.set_password(user.password) user.save() registered = True else: user_form = RegistrationForm() return render_to_response('index.html', {'regform': user_form}, context) def login(request): context = RequestContext(request) login_form = LoginForm() return render_to_response('index.html', {loginform: login_form}, context) 

forms.py de la aplicación de inicio de sesión:

 from django.contrib.auth.models import User from django import forms from crispy_forms.helper import FormHelper from crispy_forms.layout import Submit, Layout, Field from crispy_forms.bootstrap import (PrependedText, PrependedAppendedText, FormActions) from login.models import User class RegistrationForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput()) class Meta: model = User fields = ('username', 'email', 'first_name','last_name','password') helper = FormHelper() helper.form_method = 'POST' helper.add_input(Submit('save', 'save', css_class='btn-primary')) class LoginForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput()) class Meta: model = User fields = ('username', 'password') @property def helper(self): helper = FormHelper() helper.form_method = 'POST' helper.add_input(Submit('save', 'save', css_class='btn-primary')) return helper 

Index.html modal:

  

Modal con bash de Ajax (snip):

 

Vista de inicio de sesión para solicitud de Ajax:

 def addUser(request): if request.is_ajax() and request.POST: data = {request.POST.get('item')} return HttpResponse(json.dumps(data), content_type='application/json') else: raise Http404 

Según lo solicitado, HTML procesado para Modal:

  

Nombre de usuario (requerido. 30 caracteres o menos. Letras, números y @ /. / + / – / _ caracteres

Contraseña*

  

Nombre de usuario (requerido. 30 caracteres o menos. Letras, números y @ /. / + / – / _ caracteres

Dirección de correo electrónico Nombre Apellido Contraseña *

  

Actualizar Ajax:

  $(document).ready(function() { var frm = $('#id-registration'); frm.submit(function (e) { $.ajax({ type: frm.attr('method'),  url: frm.attr('action'),  data: $(frm).serialize(),  success: function (data) {  if (!(data['success'])) { console.log('ifcalled') $(frm).replaceWith(data['form_html']);  } else{ console.log('elseCalled') $("#div-form").html("Thanks!"); // $(frm).find('.success-message').show(); } }, error: function(data) {  $(frm).find('.error-message').show() } }); e.preventDefault();  }); });  

Actualización: el formulario se está enviando a la base de datos. Sin embargo, la validación de formulario no está funcionando. El control if / else parece validar siempre falso. Si elimino form.submit (). Funciona y muestra errores de forma, pero la página se actualiza.

views.py actualizado:

 def addUser(request): form = RegistrationForm(data=request.POST or None) if form.is_valid(): # You could actually save through AJAX and return a success code here form.save() return {'success': True} form_html = render_crispy_form(form) return {'success': False, 'form_html': form_html} 

Formularios actualizados.py:

 class RegistrationForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput()) class Meta: model = User fields = ('username', 'email', 'first_name','last_name','password') def __init__(self, *args, **kwargs): super(RegistrationForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_id = 'id-registration' self.helper.form_class = 'blueForms' self.helper.form_method = 'post' self.helper.form_action = '/register/' self.helper.add_input(Submit('submit', 'Submit')) 

El problema ha sido resuelto:

    $(document).ready(function () { var frm = $('#id-registration'); $('#id-registration').validate({ rules: { username: {required: true}, email: {required: true}, password: {required: true} }, submitHandler: function(){ $.ajax({//begin type: 'POST',  url: frm.attr('action'),  data: $(frm).serialize(),  success: function(data){ $(frm).hide(); $("#div-form").html("

Thank you, for Registering!

"); }, error: function(data) { $("#div-form").html("Failure!"); }//end error });//end ajax return false; } }); });

En primer lugar, activaría las herramientas de desarrollo de su navegador (por ejemplo, Firebug en Firefox). En la pestaña Red, supervise de cerca si su solicitud POST se envía o no.

Una vez que se envía la solicitud, puede inspeccionar el contenido y la respuesta de su solicitud. Esto ayuda a identificar si su formulario captura todos los datos de las entradas, o si puede tener problemas con su urls.py.

En caso de que el formulario se envíe correctamente (Estado 200), puede comenzar a depurar su aplicación Django.

Tienes dos posibilidades:

  1. A través de una solicitud de publicación HTML

Ponga en

. Cambie el tipo del botón enviar a type="submit" y corrija los atributos del formulario agregando una acción y corrigiendo el error tipográfico en el método.

  1. A través de una solicitud AJAX.

Agregue una identificación al botón de envío y adjunte un evento de clic al botón donde realiza la solicitud de AJAX.

  

Para más información lea http://getbootstrap.com/javascript/#modals-examples

Tuve un problema similar y deshacerme de data-dismiss="modal" solucioné.

No responde mucho a tu pregunta, pero las personas con el mismo problema terminan en esta página, y quizás esto les ayude.