Problème avec le formulaire Django lorsqu’il est soumis à l’aide du plugin de formulaire jQuery

lors de la soumission de mon formulaire à l’aide du plug-in de formulaire jQuery, la demande reçue par la vue cible est différente de celle reçue lorsque le formulaire est soumis de manière standard (sans JavaScript) et mon modèle Django ne s’affiche pas comme prévu. Lorsqu’il est soumis de manière standard, le modèle génère les erreurs de formulaire (le “formulaire. [Nom_zone] .errors), alors que ce n’est pas le cas lorsqu’il est soumis via javascript. A l’aide du script javascript submit, comment puis-je obtenir une demande permettant de rendre le Le modèle et le diff entre les objects de requête reçus dans les deux cas sont indiqués ci-dessous.

merci jul

code javascript:

var is_geocoded = false; var interval; $(function(){ $("#submit").click(function() { var options = { beforeSubmit: getPosition, // pre-submit callback success: showResponse // post-submit callback }; // bind form using 'ajaxForm' $('#addresto').ajaxForm(options); }); }); function getPosition() { var geocoder = new GClientGeocoder(); var country = $("#id_country").val(); var city = $("#id_city").val(); var postal_code = $("#id_postal_code").val(); var street_number = $("#id_street_number").val(); var street = $("#id_street").val(); var address = street_number+", "+street+", "+postal_code+", "+city+", "+country; geocoder.getLatLng( address, function(point) { if (point) { $("#id_latitude").val(point.lat()) $("#id_longitude").val(point.lng()) is_geocoded = true; } else { is_geocoded = true; } }); interval = setInterval("doSubmit()", 500); return false; } function doSubmit() { if (is_geocoded) { $("#addresto").ajaxSubmit(); clearInterval(interval); } } 

Code de modèle Django:

 

{{form.name.errors}} {{ form.name }}

{{form.country.errors}} {{ form.country }}

Voici la différence entre les demandes reçues par la vue avec la soumission standard et la soumission javascript:

 xxx@xxx:~$ diff javascript_submit standard_submit 7c7  'CONTENT_TYPE': 'application/x-www-form-urlencoded', 24c24  'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 28d27 < 'HTTP_CACHE_CONTROL': 'no-cache', 33d31 < 'HTTP_PRAGMA': 'no-cache', 36d33 < 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest', 70c67 < 'wsgi.input': , --- > 'wsgi.input': , 

La raison pour laquelle les erreurs n’apparaissent pas lorsque vous soumettez via ajax est que vous ne réactualisez pas la page.

Vous devrez renvoyer json ou xml à votre javascript et insérer les erreurs dans la page de cette façon.

Vous pouvez également simplement transformer le formulaire en une goutte de HTML et écraser le formulaire actuel sur la page (mais ceci est un peu plus compliqué et moins efficace).

En gros, je vous recommande simplement d’utiliser la méthode request.is_ajax() de django pour déterminer si le formulaire est soumis avec ajax et de renvoyer json pour les requêtes ajax.