11
votes

Le format Django ne valident pas

J'essaie d'enregistrer un format, mais il semble de contourner IS_VALID () même s'il existe des champs obligatoires.

Pour tester cela, j'ai une forme simple: p> xxx pré>

la vue: p> xxx pré>

et le modèle:

<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
{{ formset.management_form }}
{% for form in formset.forms %}
  <ul class="addalbumlist">
    {% for field in form %}
     <li>
        {{ field.label_tag }}
        {{ field }}
        {{ field.errors }}
     </li>
    {% endfor %}
  </ul>
{% endfor %}
   <div class="inpwrap">
    <input type="button" value="add another">
    <input type="submit" value="add">
   </div>
</form>


0 commentaires

4 Réponses :


14
votes

heh, j'avais exactement le même problème. Le problème est que vous utilisez un format !! Les constructeurs automatiques permettent tous les champs sous forme d'être vide. Si, toutefois, vous avez 2 champs et remplissez un seul, alors il reconnaîtra vos trucs requis. Cela fait ceci parce que les constructeurs automatiques sont fabriqués pour "Ajout en vrac" et parfois, vous ne voulez pas remplir toutes les formes supplémentaires sur une page. Vraiment énervant; vous pouvez voir ma solution ici.


0 commentaires

-4
votes

Utilisation:

Si non (formset.Errors): ...

au lieu de:

si formset.is_valid (): ...


1 commentaires

formset.errors ne sera pas rempli avant que ce soit formset.is_valid () est appelé, donc cette solution ne fonctionnera pas totalement.



0
votes

Ajouter 2 lignes.

if request.method == 'POST':
  def initial_form_count(self): return 10 # the number of forms
  AlbumFormSet.initial_form_count = initial_form_count
  formset = AlbumFormSet(request.POST, request.FILES)


0 commentaires

3
votes

Pour chacun des champs requis, ajoutez une entrée supplémentaire dans le paramètre ATTROS

    resident_status = forms.ChoiceField(widget=forms.Select(
        attrs={'class': 'form-control', 'required': 'required'}), choices=President.RESIDENT_STATUS,
        required=True)




0 commentaires