Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218

Обработка корзины, или почему генератор не работает

13.07.2020, 16:00. Показов 918. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Пытаюсь сделать следующее: беру модель, пихаю ее в корзину, она не пихается, я негодую, по этапно

View
Python
1
2
3
product = get_object_or_404(Dishes, id=pk)
        cart = Cart(request)
        cart.add(item=product)
сам класс корзины
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Cart(object):
 
    def __init__(self, request):
 
        self.session = request.session
        cart = self.session.get('cart')
        if not cart:
            cart = request.session['cart'] = {}
        self.cart = cart
 
    def add(self, item):
        product_id = item.id
        if product_id not in self.cart:
            self.cart[product_id] = {'quantity': 1,
                                     'price': str(item.price),
                                     'name': str(item.name)}
        self.session['cart'] = self.cart
        self.session.modified = True
 
    def __iter__(self):
        product_ids = self.cart.keys()
        filtered_product = Dishes.objects.filter(id__in=product_ids)
        for obj in filtered_product:
            self.cart[str(obj.id)]['obj'] = obj
 
        for item in self.cart.values():
            yield item
сама ошибка выглядит следующим образом
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TypeError at /8/
Object of type Dishes is not JSON serializable
Request Method: GET
Request URL:    http://127.0.0.1:8000/8/
Django Version: 3.0.7
Exception Type: TypeError
Exception Value:    
Object of type Dishes is not JSON serializable
Exception Location: C:\Users\ikunk\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py in default, line 179
Python Executable:  G:\f\TMP\venv\iiko\Scripts\python.exe
Python Version: 3.8.1
Python Path:    
['G:\\f\\TMP\\iiko',
 'C:\\Users\\ikunk\\AppData\\Local\\Programs\\Python\\Python38-32\\python38.zip',
 'C:\\Users\\ikunk\\AppData\\Local\\Programs\\Python\\Python38-32\\DLLs',
 'C:\\Users\\ikunk\\AppData\\Local\\Programs\\Python\\Python38-32\\lib',
 'C:\\Users\\ikunk\\AppData\\Local\\Programs\\Python\\Python38-32',
 'G:\\f\\TMP\\venv\\iiko',
 'G:\\f\\TMP\\venv\\iiko\\lib\\site-packages',
 'G:\\f\\TMP\\venv\\iiko\\lib\\site-packages\\setuptools-40.8.0-py3.8.egg']
Server time:    Пн, 13 Июл 2020 10:21:45 +0000
остальной код ошибки запихнул под спойлер
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Traceback Switch to copy-and-paste view
G:\f\TMP\venv\iiko\lib\site-packages\django\core\handlers\exception.py in inner
            response = get_response(request) …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\utils\deprecation.py in __call__
            response = self.process_response(request, response) …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\contrib\sessions\middleware.py in process_response
                        request.session.save() …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\contrib\sessions\backends\db.py in save
        obj = self.create_model_instance(data) …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\contrib\sessions\backends\db.py in create_model_instance
            session_data=self.encode(data), …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\contrib\sessions\backends\base.py in encode
        serialized = self.serializer().dumps(session_dict) …
▶ Local vars
G:\f\TMP\venv\iiko\lib\site-packages\django\core\signing.py in dumps
        return json.dumps(obj, separators=(',', ':')).encode('latin-1') …
▶ Local vars
C:\Users\ikunk\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py in dumps
    return cls( …
▶ Local vars
C:\Users\ikunk\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py in encode
        chunks = self.iterencode(o, _one_shot=True) …
▶ Local vars
C:\Users\ikunk\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py in iterencode
        return _iterencode(o, 0) …
▶ Local vars
C:\Users\ikunk\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py in default
        raise TypeError(f'Object of type {o.__class__.__name__} ' …
▶ Local vars

ошибка возникает, когда я пытаюсь в шаблоне вывести ее. делал через for и with, но либо я неправильно что-то сделал, я капец запутался, может выводил неправильно, может сделал

Добавлено через 1 минуту
Python
1
2
3
4
5
{% for c in cart %}
                        {% with item=c.obj %}
                        <p>CartList - {{item.name}}</p>
                        {% endwith %}
                        {% endfor %}
вот шаблон

Добавлено через 2 часа 35 минут
на помощь друзья, я в тупике. вроде правильная логика, вывожу на шабло неправильно? это ведь словарь, да? ну кто-нибудь(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2020, 16:00
Ответы с готовыми решениями:

Генератор исключений не работает, не знаю - почему...
Вообщем такая проблема, написал код по поиску корней квадратного уравнения, но генератор исключений не работает не могу понять почему ...

Почему не работает генератор таблицы простых чисел?
Раньше всё работало, а переписал код - сразу начало борохлить вот код: package das; public class dlb { public static int c=0; ...

Почему не работает обработка строк?
a= print(a) a.remove(4) C:\Python34\python.exe &quot;C:/Documents and Settings/ia/PycharmProjects/untitled/test.py&quot; Traceback (most...

5
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
13.07.2020, 17:00
Александер2000, покажи всю вьюху, где это в шаблон выводишь.
Это весь трейсбек?
0
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218
13.07.2020, 17:15  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MainDetailView(View):
 
    def get(self, request, pk):
        template_name = 'dishes/detail.html'
        product_list = Dishes.objects.filter(id=pk)
        product = get_object_or_404(Dishes, id=pk)
        cart = Cart(request)
        cart.add(item=product)
 
        return render(request, template_name, context={'product_list': product_list, 'cart': cart})
 
    def post(self, request, pk):
        if request.method == 'POST':
            #submitbutton = request.POST.get("submit")
            alist = Dishes.objects.filter(id=pk)
            return render(request, 'cart/cart.html', {'alist': alist})
        else:
            return redirect('./')
Да весь трейсбек
но в трейсбеке есть
инфа о моей сессии, и там все есть
судя по всему только вывод непраильный
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
13.07.2020, 17:33
Александер2000, так по cart нельзя итерировать

Добавлено через 2 минуты
https://stackoverflow.com/a/3289057/11214129
https://docs.djangoproject.com... izing-data
1
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218
13.07.2020, 22:49  [ТС]
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
так по cart нельзя итерировать
Добавлено через 2 минуты
https://stackoverflow.com/a/3289057/11214129
https://docs.djangoproject.com... izing-data
__________________
Вот это, кстати самое странное. У моего знакомого, тот же код и работает, единственное, что он передает его из пост запроса по клику на кнопку, у него и подсмотрел.
но так или иначе, я согласен, что тут что-то не чисто, попробую изучить по вашим ссылка, я думаю, то что я делаю, это не единсвтенный путь
0
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218
14.07.2020, 14:18  [ТС]
Проблема решена, помог френдли человек павший под моими домоганиями, проблему решили во так

Python
1
2
3
4
5
6
7
8
class MainCartView(TemplateView):
        template_name = 'cart/cart.html'
        success_url = 'cart.html'
 
        def get_context_data(self, **kwargs):
            context = super(MainCartView, self).get_context_data(**kwargs)
            context['cart'] = Cart(self.request)
            return context
добавлением в саму вью конкретно
Python
1
2
3
4
def get_context_data(self, **kwargs):
            context = super(MainCartView, self).get_context_data(**kwargs)
            context['cart'] = Cart(self.request)
            return context
Вдруг кому-то это поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.07.2020, 14:18
Помогаю со студенческими работами здесь

Почему работает на Linux, но не работает на Windows или аномалии wi-fi адаптера
Из заголовка, уже возникает вопрос а такое вообще возможно? Купил на днях usb wi-fi адаптер, не обратив внимание на то что он для 5Ghz...

Почему событие onMouseout не работает? Или работает неправильно?
В чем проблема? Почему событие onMouseout в коде ниже не работает так, как следует? Т.е., мне нужно, чтобы при onMouseout у меня...

Не могу понять почему не работает (или правильно не работает)
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Не применяются купоны правил корзины! Почему?
почему-то метод CCatalogDiscountCoupon::SetCoupon($oneCoupon); не применяет купон правила корзины. Хотя тот активен и работает. Купон...

Почему не работает OR или XOR ?
День добрый! Есть таблица num|story|author 1|Scary Movie|John 2|Just So|NULL ввожу select story,author from pdotest...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru