Как настроить формы django для продажи пользовательских продуктов? - PullRequest
2 голосов
/ 26 марта 2019

Я только начал изучать Django, и у меня есть простая настройка корзины покупок, следуя уроку Антонио Меле в его книге «Django 2 by Example». Я могу выбрать продукты, и тогда количество будет выбором. Это прекрасно работает для универсальных продуктов. Что делать, если у меня есть нестандартные изделия, такие как ручки с гравировкой? Покупатель выбирает количество 3, но он хочет, чтобы на ручках были выгравированы разные имена. Как бы я это сделал?

Вот код для forms.py, который контролирует количество.

from django import forms

PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 11)]

class CartAddProductForm(forms.Form):
    quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES, coerce=int)
    update = forms.BooleanField(required=False, initial=False, widget=forms.HiddenInput)

и соответствующая часть шаблона HTML выглядит как

  {% for item in cart %}
    {% with product=item.product %}
      <tr>
        <td>{{ product.name }}</td>
        <td>
          <form action="{% url "cart:cart_add" product.id %}" method="post">
            {{ item.update_quantity_form.quantity }}
            {{ item.update_quantity_form.update }}
            <input type="submit" value="Update">
            {% csrf_token %}
          </form>
        </td>
        <td><a href="{% url "cart:cart_remove" product.id %}">Remove</a></td>
        <td class="num">${{ item.price }}</td>
        <td class="num">${{ item.total_price }}</td>
      </tr>
    {% endwith %}
  {% endfor %}

1 Ответ

1 голос
/ 26 марта 2019

здорово, что вы начали с Джанго.

Для сложных систем магазинов уже достаточно много работы для вас в фоновом режиме, если вы решите использовать готовый пакет Django.

Вы найдете все хорошие и ухоженные пакеты электронной коммерции здесь: https://djangopackages.org/grids/g/ecommerce/

Очень хорошей отправной точкой было бы чтение документации по django-oscar, которая является лучшей современной системой интернет-магазинов. Таким образом, вы можете по-настоящему погрузиться во все возможности магазинов django и использовать надежную систему в фоновом режиме.

Если вы хотите придерживаться своего урока, вы можете сделать это так:

  1. Добавьте текстовое поле к вашей модели пера, например engrave_text = models.CharField(default=None)

  2. Добавьте engrave_text в качестве поля формы для формы, подобной AddEngravedPenToCartForm.

Таким образом, каждая ручка с индивидуальной гравировкой - это отдельный продукт.

С уважением, Бен

...