Django: comment faire pour afficher les erreurs de forme pour chaque modèle objet dans un inline formset
J'ai un auteur modèle et un modèle livres. Un utilisateur peut modifier les propriétés de tous les livres d'un auteur donné. Je veux être en mesure à l'affichage des erreurs pour chaque livre, plutôt que d'avoir toutes les erreurs répertoriées sur le dessus, Comment puis-je faire cela?
MODÈLES
from django.db import models
from django.forms import ModelForm, Textarea
from django import forms
class Author(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
def fullname(self):
return '%s %s' % (self.fname, self.lname)
fullname = property(fullname)
def __unicode__(self):
return self.fullname
class Books(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=50)
publisher = models.CharField(max_length=50)
edition = models.CharField(max_length=50)
comment = models.TextField()
def __unicode__(self):
return self.title
VUE
def author_books_edit(request, author_id):
a = get_object_or_404(Author, pk=author_id)
authorsbooks = a.books_set.all()
bookformset = inlineformset_factory(Author, Books, can_delete=True, can_order=True, exclude=('company',), extra=1)
formset = bookformset(instance=a)
if request.method == "POST":
formset = bookformset(request.POST, request.FILES, instance=a)
if formset.is_valid():
formset.save()
else:
form_errors = formset.errors
return render_to_response('test/authors_books_edits.html', {'author': a, 'authorsbooks': authorsbooks, 'formset': formset, 'form_errors': form_errors}, context_instance=RequestContext(request))
return render_to_response('test/authors_books_edits.html', {'author': a, 'authorsbooks': authorsbooks, 'formset': formset,}, context_instance=RequestContext(request))
MODÈLE
#all errors are here
{% for dict in form_errors %}
{{ dict }}
{% endfor %}
#all forms are here, i want to pair the errors for each form
<form method="post" action="/test/{{ author.id }}/books/">
{% csrf_token %}
<table>
{{ formset }}
</table>
<input type="submit" value="Submit"/>
</form>
MODÈLE mis à JOUR: ne pas afficher les erreurs
<form method="post" action="/test/{{ author.id }}/books/">
{% formset.management_form %}
{% csrf_token %}
<table>
{% for x in formset %}
{{x.errors }}
{{ x }}
{% endfor %}
</table>
<input type="submit" value="Submit"/>
Pouvez-vous ajouter une source pour les Livres et Auteur modèle afin que je puisse essayer ? merci 😉
ajout des modèles pour toi
"get_object_or_404(auteur, pk=author_id)" doit être "get_object_or_404(Auteur, pk=author_id)" (en majuscule Auteur) le droit ? Aussi, êtes-vous sûr que votre modèle est appelé Livre ? Il semble que ça devrait être des Livres ?
aussi: aurthorsbooks devrait être authorsbooks
Oui, désolé, je suis à copier, mais de masquage de certaines variables. De toute façon, la structure est essentiellement la même. et toujours incapables de voir les erreurs.. sauf lors de l'utilisation: {% pour les dict en form_errors %} {{ dict }} {% finpour %}
ajout des modèles pour toi
"get_object_or_404(auteur, pk=author_id)" doit être "get_object_or_404(Auteur, pk=author_id)" (en majuscule Auteur) le droit ? Aussi, êtes-vous sûr que votre modèle est appelé Livre ? Il semble que ça devrait être des Livres ?
aussi: aurthorsbooks devrait être authorsbooks
Oui, désolé, je suis à copier, mais de masquage de certaines variables. De toute façon, la structure est essentiellement la même. et toujours incapables de voir les erreurs.. sauf lors de l'utilisation: {% pour les dict en form_errors %} {{ dict }} {% finpour %}
OriginalL'auteur thedeepfield | 2012-02-24
Vous devez vous connecter pour publier un commentaire.
MODIFIER
authors_books_edits.html
views.py
models.py
urls.py
Vous pouvez faire un autre temporaire de l'application à tester.
Il ressemble à ceci: http://imageshack.us/photo/my-images/824/screenshotat20120227190.png/
== FIN DE MODIFIER
Vous pouvez effectuer une itération sur les formes en tant que telles:
Dans ce cas, reportez-vous à Django de l'affichage d'un formulaire à l'aide d'un modèle de documentation: https://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template
Puis, plus intéressant, la personnalisation d'un modèle de formulaire (voir le formulaire.non_field_errors):
https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template
Avez-vous essayé {{ x.non_field_errors }} au lieu de {{x.erreurs }} ?
oui, x.non_field_errors ne montre rien. C'est bizarre, parce que {% pour les dict en form_errors %} {{ dict }} {% finpour %} affiche les erreurs, tout simplement pas de paire avec mes formes...
Il y a deux types d'erreurs: le champ des erreurs et non le champ des erreurs. Pour obtenir le champ des erreurs, ce qui doit s'afficher à côté des entrées, utiliser {{ formulaire.nom_champ.erreurs }}. Pour obtenir des non champ des erreurs, ce qui doit s'afficher en haut de la forme, l'appel de {{ formulaire.non_field_errors }}
merci pour vos commentaires, mais les erreurs sont toujours pas apparaître.. j'ai mis {{ formulaire.non_field_errors }} droit, en vertu de {{ formulaire.management_form }}, j'ai aussi mis des {{ x.nameofmyfield.erreurs }} juste au-dessus de {{ x }} et rien ne s'est présenté.. ce que je fais mal? c'est me rend fou.
OriginalL'auteur jpic
En supposant que le livre est un formulaire que vous pouvez faire:
Qu'a la sortie de débogage dire?
il dit ValidationError [u'ManagementForm de données est manquant ou a été falsifié']
C'est parce que: docs.djangoproject.com/en/dev/topics/forms/formsets/...
OriginalL'auteur Nix