- клиент добавляет айдишники товаров в сессию!
- в корзине редактирует выведенные из сессии товары и переходит на оформление заказа, где заполняет свои данные и завершает заказ, чем сохраняет заказ в бд! Для оформлении заказа я использую форму модели Order в которой одно поле (товары из сессии клиента) скрытое и имеет оно несколько товаров(список) так вот передать этот список через форму я и не могу, а только последний элемент...
- request.POST.getlist("name_product") я так понимаю нужно использовать для получения указанного списка, но как прикрутить его?
models.py
class Order(models.Model):
first_name = models.CharField(u"Имя заказчика", max_length= 100)
second_name = models.CharField(u"Фамилия заказчика", max_length= 100)
phone = models.CharField(u"Контактный телефон заказчика", max_length= 100)
email = models.EmailField(u"Электронная почта")
address = models.CharField(u"Адрес доставки", max_length= 100)
name_product = models.CharField(u"Товары заказа", max_length= 100)
def __iter__(self):
return[self.first_name]
def __str__(self):
return self.first_name
class Meta:
verbose_name="Заказ"
verbose_name_plural="Заказы"
forms.py
class OrderForm(ModelForm):
class Meta:
model = Order
fields = ["first_name","second_name",
"phone","email","address",
"form_shipping","form_payment",
"name_product"
]
views.py
def order(request):
cart = request.session.get('cart')
product_items = Product.objects.filter(id__in=cart)
#беру товары из сессии
if request.method == "POST":
form = OrderForm(request.POST)
request.POST.getlist("name_product") #нужно где-то прикрутить
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return redirect("/")
else:
form = OrderForm()
content = {
"product_items":product_items
}
return render (request, "order.html", content)
order.html
<form action="" method="POST">{% csrf_token %}
<label for="id_first_name">Имя заказчика:</label> <input id="id_first_name" maxlength="100" name="first_name" type="text" />
<label for="id_second_name">Фамилия заказчика:</label> <input id="id_second_name" maxlength="100" name="second_name" type="text" />
<label for="id_phone">Контактный телефон заказчика:</label> <input id="id_phone" maxlength="100" name="phone" type="text" />
<label for="id_email">Электронная почта:</label> <input id="id_email" maxlength="254" name="email" type="email" />
<label for="id_address">Адрес доставки:</label> <input id="id_address" maxlength="100" name="address" type="text" />
{% for product_item in product_items %}
<input type='hidden' name="name_product" value="{{ product_item }}"/> ВОТ ЗДЕСЬ ЗАГВОЗДКА!!!!
{% endfor%}
<input type="submit" value="Завершить заказ!" />
</form>
При рендере скрытое поле выглядит вот так
Именно такой подход к решению для меня не критичен! Может есть и другие варианты выхода?