Django accès formset de données
Je vais avoir de la difficulté à accéder à des données soumises par l'intermédiaire de mon formset. Voici mon code:
Modèle:
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.as_p }}
{% endfor %}
<input type="submit" value="Submit">
</form>
Vue:
def addMembers(request, id, members):
if request.user.is_authenticated():
members = int(members)
MemberFormSet = formset_factory(MemberForm, extra = members)
if request.method == 'POST':
print 'post'
formset = MemberFormSet(request.POST)
if formset.is_valid():
cd = formset.cleaned_data
for f in formset:
first_name = cd.first_name
last_name = cd.last_name
email = cd.email
house = House.objects.get(id = id)
member = Member(first_name = first_name, last_name = last_name, email = email, house = house, created_on = timezone.now())
member.save()
return HttpResponseRedirect(reverse('houses:controlPanel'))
else:
formset = MemberFormSet()
return render_to_response('houses/add_members.html', {'formset' : formset}, context_instance = RequestContext(request))
return HttpResponseRedirect(reverse('allauth.account.views.login'))
J'ai essayé plusieurs méthodes d'accès aux données côté de ce qui est actuellement écrit notamment:
f['attribute']
cd['attribute']
request.POST['attribute']
formset.cleaned_data['attribute']
J'ai des erreurs allant de u"Key 'email' not found in Form"
à list indices must be integers, not str
Comment devrais-je accéder à des données soumises par un formset? De Django reinhardt, de la documentation ne donne pas de réponse claire à cette et de la recherche, j'ai trouver beaucoup de manières différentes, mais aucun de ceux qui ont travaillé encore. Merci pour votre aide.
OriginalL'auteur apardes | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
cd est un dictionnaire. Aussi, vous pouvez chercher le dictionnaire des valeurs à partir de formes individuelles plutôt que le formset
f.is_valid()
. Un formset n'est pas valide à moins que toutes ses forme sont également valables.Vous avez raison
aucun moyen de vérifier cela avant de is_valid ?
Je ne pense pas que cela pourrait être plus contre-intuitif. Merci de faire sens de tout cela.
Suis-je la seule personne qui a pensé à formset.save() de nettoyer chaque formulaire et enregistrer chaque formulaire de données nettoyées à son exemple?
OriginalL'auteur karthikr
Je pense que vous devriez être à l'aide d'un model_formsetfactory, ou encore mieux, un inlineformset_factory. Vous êtes le remplissage des modèles à partir des données de formulaire, qui est ce qu'ils sont conçus pour. Obtenir la sale les modèles à partir de l'ensemble, à l'aide de commit=False, et ajouter dans votre Maison de relations. Quelque chose comme ceci:
Note de votre get() va également lancer une exception si la Maison d'objet n'existe pas. Juste une considération de conception.
OriginalL'auteur professorDante