Voskresenskyi
@Voskresenskyi
Начинающий джанговод!

Как вывести значения словаря из списка обьектов сессии Питон/Джанго?

Мне нужно добавить и вывести объекты из сессии таким образом, чтобы потом можно было вывести характеристика выведенных объектов!
Имеется сессия со списком, в котором есть словари -
cart(переменная сессии) [{'price': 436, 'product_id': 5}, {'price': 436, 'product_id': 6}]

добавляю их следующим способом
views.py
def add_product_to_cart(request):
	if request.method == 'POST':
		id = int(request.POST['product_id'])
		price = int(request.POST['price'])
		if 'cart' not in request.session:
			request.session['cart'] = []
		request.session['cart'].append(dict({'product_id': id, 'price': price}))
		request.session.modified = True
		return redirect("/")

и естественно мне нужно вывести значения ключей 'product_id' и 'price' в тепмлейте. Пробую делать это так:
def show_cart(request):
	cart = request.session.get('cart')
	product_items = Product.objects.filter(id__in=cart) #пробовал и так Product.objects.filter(id__in=request.session['cart'])
	content={
		"product_items":product_items
	}
	return render (request, "orderdetail.html", content)


в результате получаю ошибку - int() argument must be a string, a bytes-like object or a number, not 'dict'
Может у кого есть идеи как это реализовать?
изначально делал так:
def add_product_to_cart(request, id):
	if 'cart' not in request.session:
		request.session['cart'] = []
	request.session['cart'].append(int(id))
	request.session.modified = True
	return redirect("/")

def show_cart(request):
	cart = request.session.get('cart') 
	product_items = Product.objects.filter(id__in=cart)
	content={
		"product_items":product_items
	}
	return render (request, "orderdetail.html", content)

получал только id объекта, но в результате получал только наименование товара!! других данных вывести не мог!!
ЗАРАНЕЕ БЛАГОДАРЕН!!
  • Вопрос задан
  • 1134 просмотра
Решения вопроса 1
@iegor
Замените на id__in=(x['price'] for x in cart)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Voskresenskyi
@Voskresenskyi Автор вопроса
Начинающий джанговод!
Мой ответ таков:
Вариант №1:
views.py
def add_product_to_cart(request):
	if request.method == 'POST':
		id = int(request.POST['product_id'])
		if 'cart' not in request.session:
			request.session['cart'] = []
		request.session['cart'].append(int(id))
		request.session.modified = True
		return redirect("/")

def show_cart(request):
	cart = request.session.get('cart')
	product_items = Product.objects.filter(id__in=cart) #можно и так Product.objects.filter(id__in=request.session['cart'])
	content={
		"product_items":product_items
	}
	return render (request, "orderdetail.html", content)

Вариант №2 (в принципе отличия не серьезные):
def add_product_to_cart(request):
	if request.method == 'POST':
		id = int(request.POST['product_id'])
		price = int(request.POST['price'])
		if 'cart' not in request.session:
			request.session['cart'] = []
		request.session['cart'].append(dict({'product_id': id, 'price': price}))
		request.session.modified = True
		return redirect("/")

def show_cart(request):
	cart = request.session.get('cart')
	product_items = Product.objects.filter(id__in=(x['product_id'] for x in cart) )#можно прописать и для price вот только фактически это не нужно...
	content={
		"product_items":product_items
	}
	return render (request, "orderdetail.html", content)


В добавок - читайте свой код! В данном случае я в темплейте пропустил(скорее всего нечаянно удалил) скобку))
Спасибо iegor за помощь,)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы