Как сделать, чтобы цена продукта динамически менялась после выбора различных атрибутов товара в Django?

Я использую фреймворк Django. Есть варианты товара, такие как размер, цвет и стекло. Теперь мне нужно, чтобы цена динамически менялась при выборе опций продукта. Цена не меняется при выборе разных вариантов товара, она остается прежней. Ниже html и ajax:

{% for variant in product.variants.all %}
        <p>Size: {{ variant.size.name }}</p>
        <p>Color: {{ variant.color.name }}</p>            
        <p>Glass: {{ variant.glass.name }}</p>
        <p>Price: {{ variant.price }}</p>
    {% endfor %}
    <input type="hidden" id="product-id" value="{{ product.id }}">
    <div class="mb-3">
        <strong><label for="size" class="form-label">Ölçü:</label></strong>
        <div class="dropdown-wrapper" style="width: 120px;">
            <select class="form-select" id="size">
                {% for size in sizes %}
                    <option value="{{ size.id }}">{{ size.name }}</option>
                {% endfor %}
            </select>
        </div>
    </div>

    <div class="mb-3">
        <strong><label for="color" class="form-label">Profil Renkleri:</label></strong>
        <div class="dropdown-wrapper" style="width: 120px;">
            <select class="form-select" id="color">
                {% for color in colors %}
                    <option value="{{ color.id }}">{{ color.name }}</option>
                {% endfor %}
            </select>
        </div>    
    </div>

    <div class="mb-3">
        <strong><label for="glass" class="form-label">Cam Renkleri:</label></strong>
        <div class="dropdown-wrapper" style="width: 120px;">
            <select class="form-select" id="glass">
                {% for glass in glasses %}
                    <option value="{{ glass.id }}">{{ glass.name }}</option>
                {% endfor %}
            </select>
        </div>    
    </div>

    <!-- Описание товара -->
    <div class="card-body">
        <strong><p class="card-text">Fiyat:  </strong><span id="sell-price">{{ 
        product.sell_price }}</span> TL</strong></p>
        <h5 class="card-title">{{ product.name }}</h5>
        <p class="card-text">{{ product.description }}</p>
        <a href="{% url "cart:cart_add" %}" class="btn btn-dark add-to-cart"
            data-product-id="{{ product.id }}">
            {% csrf_token %}
            Sepete ekle</a>
    </div>
</div>
<script>
// Update price dynamically based on selected variant
    document.addEventListener('DOMContentLoaded', function () {
        const product_id = document.getElementById('product-id').value; // Assuming you have 
        an element with ID 'product-id'
        const sizeSelect = document.getElementById('size');
        const colorSelect = document.getElementById('color');
        const glassSelect = document.getElementById('glass');
        const priceElement = document.getElementById('sell-price');
    
        sizeSelect.addEventListener('change', updatePrice);
        colorSelect.addEventListener('change', updatePrice);
        glassSelect.addEventListener('change', updatePrice);
    
        function updatePrice() {
        const size_id = sizeSelect.value;
        const color_id = colorSelect.value;
        const glass_id = glassSelect.value;
    
        if (product_id && size_id && color_id && glass_id) {
            calculateUpdatedPrice(product_id, size_id, color_id, glass_id);
        }
        }
    
        function calculateUpdatedPrice(product_id, size_id, color_id, glass_id) {
        fetch(`/get_variant/? 
             product_id=${product_id}&size=${size_id}&color=${color_id}&glass=${glass_id}`)
            .then(response => response.json())
            .then(data => {
            priceElement.textContent = data.price;
            })
            .catch(error => console.error('Error:', error));
        }
    });
</script>

{% endblock %}

 document.addEventListener('DOMContentLoaded', function () {
  const product_id = document.getElementById('product-id').value; // Assuming you have an element with ID 'product-id'
  const sizeSelect = document.getElementById('size');
  const colorSelect = document.getElementById('color');
  const glassSelect = document.getElementById('glass');
  const priceElement = document.getElementById('sell-price');

  sizeSelect.addEventListener('change', updatePrice);
  colorSelect.addEventListener('change', updatePrice);
  glassSelect.addEventListener('change', updatePrice);

  function updatePrice() {
    const size_id = sizeSelect.value;
    const color_id = colorSelect.value;
    const glass_id = glassSelect.value;

    if (product_id && size_id && color_id && glass_id) {
      calculateUpdatedPrice(product_id, size_id, color_id, glass_id);
    }
  }

  function calculateUpdatedPrice(product_id, size_id, color_id, glass_id) {
    fetch(`/get_variant/?product_id=${product_id}&size=${size_id}&color=${color_id}&glass=${glass_id}`)
      .then(response => response.json())
      .then(data => {
        priceElement.textContent = data.price;
      })
      .catch(error => console.error('Error:', error));
  }
});
Вернуться на верх