Django formsets: faire d'abord?
Ces formsets présentent exactement le en face de comportement que je veux.
Mon point de vue est mis en place comme ceci:
def post(request): # TODO: handle vehicle formset
VehicleFormSetFactory = formset_factory(VehicleForm, extra=1)
if request.POST:
vehicles_formset = VehicleFormSetFactory(request.POST)
else:
vehicles_formset = VehicleFormSetFactory()
Et mon modèle ressemble à ceci:
<div id="vehicle_forms">
{{ vehicles_formset.management_form }}
{% for form in vehicles_formset.forms %}
<h4>Vehicle {{forloop.counter}}</h4>
<table>
{% include "form.html" %}
</table>
{% endfor %}
</div>
De cette façon, il génère initialement seulement 1 forme, comme je veux. Mais je veux que l'on forme à la nécessaire!
Quand j'ai ajouter dynamiquement des formulaires avec JavaScript et vehicles_formset.empty_form
tous les formulaires requis, que je ne veux pas.
De la documentation:
Le formset est assez intelligent pour ignorer supplémentaire formes qui n'ont pas changé.
C'est le comportement de la première forme d'exposant (pas ce que je veux), mais pas le comportement que les extra-formes sont montrer (ce que je veux).
Est-il un attribut je peux peut changer au moins un forme requise?
- mpen même si je suis en retard pour la fête, je me demandais comment faire pour aller sur une question un peu différente que je suis face à ma question ici (stackoverflow.com/questions/44159559/...)
- Vous demandez le mauvais gars. Je n'ai pas utilisé de Django depuis peu de temps après que j'ai posté cette question.
- ooh, Ok bro merci pour la réponse
Vous devez vous connecter pour publier un commentaire.
Trouvé une meilleure solution:
Puis de créer votre formset comme ceci:
Je vraiment ne sais pas pourquoi ce n'était pas une option pour commencer... mais, peu importe. Il n'a fallu que quelques heures de ma vie à comprendre.
Cela fera que tous les formulaires nécessaires. Vous pourriez faire seulement le premier requis par la mise en
self.forms[0].empty_permitted
àFalse
.self.forms[0]
je pense que, en supposant que vous avez au moins une forme.Nouveau dans Django 1.7: vous pouvez spécifier ce comportement avec votre formset_factory
https://docs.djangoproject.com/en/1.8/topics/forms/formsets/#validate-min
extra=3
et le troisième formulaire est rempli et les deux premières formes sont vide? Cela déclenche une erreur. Comment mettre en œuvre ce pour être valide avec atleast un formulaire soit valide??Bien... ce qui rend la première forme requise.
Seul "problème" est que si il y a 0 les formes, puis les
clean
méthode ne semble pas appelée à tous, je ne sais donc pas comment faire pour vérifier si il y a 0. Vraiment...cela ne doit jamais arriver bien (sauf que mon JS a un bug, vous permettant de retirer tous les formes).Oh, je pense que je vois. Essayez ceci:
== Réponse originale à cette question ci-dessous ==
Quand tu dis "au moins faire un formulaire obligatoire", je suppose que vous voulez dire "ne faire qu'un formulaire supplémentaire requis, indépendamment de la façon dont beaucoup ont été ajoutées via le javascript".
Vous aurez besoin d'avoir caché des commentaires sur votre page qui contient le nombre de formulaires qui ont été ajoutés par le biais de javascript et de l'utilisation de ce nombre, moins 1, que la valeur à transmettre dans le
extra
attribut à votre formsets constructeur.