Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Delete sur inlineformset_factory

0 votes

Bonjour,

J'utilise Django pour gérer mes devis, il y a une table devis et une table devisrow qui contient chaque entrée relative a un devis. L'édition des lignes du devis fonctionne correctement, cependant je ne parviens pas a supprimer une ligne.

Au niveau de mon template, j'ai ajouté {% if form.instance.pk %}{{ form.DELETE }}{% endif %} :

    <tbody>
  {% for form in devisrows_formset.forms %}
        <tr id="{{ form.prefix }}-row">
      {% if form.id %}
      {% bootstrap_field form.id show_label=False show_help=False %}
      {% endif %}
      <td>{% if form.instance.pk %}{{ form.DELETE }}{% endif %}{% bootstrap_field form.description show_label=False show_help=False %}</td>
      <td>{% bootstrap_field form.quantite show_label=False show_help=False field_class="form-group quantite" %}</td>
      <td>{% bootstrap_field form.unites show_label=False show_help=False %}</td>
      <td>{% bootstrap_field form.prix_unitaire show_label=False show_help=False field_class="form-group prix-unite" %}</td>
      <td class="prix_total">€</td>
      <td></td>
    </tr>
  {% endfor %}
</tbody>

Comme j'utilise .save(commit=False), je suis la documentation de Django pour supprimer chaque champs via deleted_objects dans mon views.py :

        DevisRowFormset = inlineformset_factory(Devis, DevisRow, fields=(
            'description', 'quantite', 'unites', 'prix_unitaire'), can_delete=True, extra=0)

        devis_row_formset = DevisRowFormset(request.POST, instance=devis)
        if devis_row_formset.is_valid():
            devis_row_formset = devis_row_formset.save(commit=False)
            for obj in devis_row_formset.deleted_objects:
                obj.delete()
            for devis_row in devis_row_formset:
                devis_row.devis = devis
                devis_row.subtotal = devis_row.prix_unitaire * devis_row.quantite
                devis_row.save()

Lorsque je valide la modification, cela pète une erreur :

'list' object has no attribute 'deleted_objects'

Si je fais un print devis_row_formset, je vois bien le champs HTML correspondant avec une valeur a "checked" :

 <tr><th><label for="id_devisrow_set-3-DELETE">Supprimer :</label></th><td><input checked="checked" id="id_devisrow_set-3-DELETE" name="devisrow_set-3-DELETE" type="checkbox" />

Je ne vois pas où se trouve le problème, si quelqu'un a une idée :)
Merci

demandé 5-Jan par Stiquemou (206 points)

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...