Résolue

Mise à jour de la quantité dans le panier avec Bootstrap

# Bases de données # Django # Bootstrap

Bonjour à vous!!
Je ne sais pas comment m'y prendre pour que les modifications de la quantité soient prise en compte et enregistrée dans la bd etant donné que je travaille directement avec bootstrap. J'ai fais des recherches par rapport mais aucune ne me donnait un resultat satisfaisant

<input aria-describedby="button-addon1" aria-label="Example text with button addon" class="form-control text-center quantity-amount" name="quantity" placeholder="" type="text" value="{{ form.instance.quantity }}"/>
<div class="col-md-6 mb-3 mb-md-0">
    <button class="btn btn-black btn-sm btn-block">Update Cart</button>
</div>

Gabriel Trouvé

Mentor

Salut,

Si je comprends bien tu veux juste ajouter du bootstrap ?

Dans ton formset tu pourrais faire un truc du genre :

<form action="{% url 'store:update-quantities' %}" class="mt-4" method="POST">
    {% csrf_token %}
    {{ forms.management_form }}
    {% for form in forms %}
    <div class="card mb-3">
<div class="card-body">
<h3 class="card-title">{{ form.instance.product.name }}</h3>
<div class="row">
<div class="col-md-4">
<img alt="image produit" class="img-fluid" src="{{ form.instance.product.thumbnail_url }}"/>
</div>
<div class="col-md-8">
<p class="card-text">{{ form.instance.product.descripton }}</p>
                    {{ form.as_p }}
                </div>
</div>
</div>
</div>
    {% endfor %}
    <button class="btn btn-primary" type="submit">Mettre à jour les quantités</button>
</form>

En fait je garde la structure des balises django, en y ajoutant un peu de boostrap.

non pas exactement,
Je souhaite pouvoir mettre à jour la quantite de produit dans le panier et je sais pas comment procerder sans utiliser le formulaire par defaut de django ( {{ form.as_p }}).

Voici mon formulaire complet au besoin

  <form %}="" 'chaima_shop:update_quantities'="" action="{%" class="col-md-12" method="post" url="">
    {% csrf_token %}
    {{ forms.management_form }}
<div class="site-blocks-table">
<table class="table">
<thead>
<tr>
<th class="product-thumbnail">Image</th>
<th class="product-name">Product</th>
<th class="product-price">Price</th>
<th class="product-quantity">Quantity</th>
<th class="product-total">Total</th>
<th class="product-remove">Remove</th>
</tr>
</thead>
<tbody>

                      {% for form in forms %}
                      <!-- 0000000000000000000000000000 -->
<tr>
<td class="product-thumbnail">
<img alt="Image" class="img-fluid" src="{{ form.instance.product_image1.url }}"/>
</td>
<td class="product-name">
<h2 class="h5 text-black">{{ form.instance.product.product_name }}</h2>
</td>
<td>{{ form.instance.product.product_price }}</td>
<td>
<div class="input-group mb-3 d-flex align-items-center quantity-container" style="max-width: 120px;">
<div class="input-group-prepend">
<button class="btn btn-outline-black decrease" type="button"></button>
</div>
<input aria-describedby="button-addon1" aria-label="Example text with button addon" class="form-control text-center quantity-amount" name="quantity" placeholder="" type="text" value="{{ form.instance.quantity }}"/>
<div class="input-group-append">
<button class="btn btn-outline-black increase" type="button">+</button>
</div>
</div>
</td>
<td>2000 fcfa</td>
<td><a class="btn btn-black btn-sm" href="#">X</a></td>
</tr>
<!--  0000000000000000000000000000 -->

                      {% endfor %}
                      </tbody>
</table>
</div>
<div class="col-md-6 mb-3 mb-md-0">
<button class="btn btn-black btn-sm btn-block">Update Cart</button>
</div>
</form>

Gabriel Trouvé

Mentor

Est-ce que tu connais ça ?

https://django-crispy-forms.readthedocs.io/en/latest/

Je pense que django crispy forms peut résoudre ton problème :)

Et en plus il existe une version bootstrap 5 : https://github.com/django-crispy-forms/crispy-bootstrap5.

C'est ma première fois d'entendre parler et honnnêtement je n'y comprends pas grand chose. Je cherche même des tutoriel mais tout est en anglais

Voici ce que j'ai dû faire pour que les modifications des quantités soient prises en compte

                    <td>
                        {{ form.quantity }} 
                        {{ form.id }}  <!-- Champ ID caché pour le FormSet -->
</td>

J'aimerais savoir si c'est une bonne pratique svp

Gabriel Trouvé

Mentor

Si tu customise le placement des champs oui tu peux utiliser l'id.

Mais tu peux customiser avec crispy directement dans form.py.

Exemple :

from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Row, Column, Submit
from .models import Product, Supplier, Company

class ProductForm(forms.ModelForm):
    ean = forms.CharField()

    class Meta:
        model = Product
        exclude = ["slug", "company", "stock"]

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Initialisation du helper Crispy Forms
        self.helper = FormHelper()

        # Mise en forme avec Bootstrap 5 (exemple)
        self.helper.layout = Layout(
            Row(
                Column("ean", css_class="col-md-6"),
                Column("name", css_class="col-md-6"),
            ),
            "description",
            Row(
                Column("suppliers", css_class="col-md-12"),
            ),
            Submit("submit", "Enregistrer", css_class="btn-primary")
        )

D'accord merci beaucoup

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.