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

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

13.07.2020, 16:00. Показов 934. Ответов 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru