С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 11

TypeError : Field 'id' expected a number but got '<django.db.models.query_utils.DeferredA­ttribute object at 0x0000000004

22.04.2022, 06:28. Показов 3439. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Я начинающий разработчик Django. Работая над проектом, я столкнулся с проблемой, и у меня нет старших товарищей. Не могли бы вы помочь мне с ней?

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

> Field 'id' expected a number but got '<django.db.models.query_utils.DeferredA ttribute object at 0x00000000044871C0>'.
**models.py**

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  # Категория продукта
    class Category(models.Model):
        name = models.CharField('Категория', max_length=100)
        url = models.SlugField(max_length=100, unique=True, db_index=True)
 
        def __str__(self):
            return f'{self.name}'
 
        def save(self, *args, **kwargs):
            if not self.url:
                self.url = slugify(self.name)
            super(Category, self).save(*args, **kwargs)
 
        def get_absolute_url(self):
            return reverse('product_list_by_category', args=[self.url])
 
        class Meta:
            verbose_name = "Категория"
            verbose_name_plural = "Категории"
 
 
    # Папка продуктов  для каждой организации
    def products_image_path(instance, filename):
        return f'organisations_{instance.organisations.name}/products/{filename}'
 
    # Продукт
    class Products(models.Model):
        name = models.TextField(max_length=100, blank=False)
        slug = models.SlugField(max_length=200, db_index=True)
        image = models.ImageField(upload_to=products_image_path, blank=True)
        number = models.PositiveIntegerField('Количество')
        price = models.DecimalField('Цена', max_digits=10, decimal_places=2)
        category = models.ForeignKey(Category, verbose_name='Категория', blank=False, on_delete=models.SET_NULL, null=True)
        organisations = models.ForeignKey(Organisations, related_name="org_info", on_delete=models.CASCADE) 
        
 
 
        def __str__(self):
            return f'{self.name}'
 
        def save(self, *args, **kwargs):
            if not self.slug:
                self.slug = slugify(self.name)
            super(Products, self).save(*args, **kwargs)
 
 
        def get_absolute_url(self):
            return reverse('product_detail', args=[self.id, self.slug])
 
        class Meta:
            verbose_name = "Продукт"
            verbose_name_plural = "Продукты"
            ordering = ('name',)
            index_together = (('id', 'slug'),)
 
 
    # Покупатель
    class Customer(models.Model):
        card =  models.CharField("Номер карты",max_length=19)
        telephoneRegex = RegexValidator(regex = r"^\+?1?\d{8,15}$")
        telephone = models.CharField("Номер телефона", validators = [telephoneRegex], max_length = 16, unique = True)
        email = models.EmailField("Электронная почта", max_length=50)
        name = models.CharField("Имя", max_length=100)
        discount = models.BigIntegerField('Скидка')
        score = models.BigIntegerField('Счет')
        organisations = models.ForeignKey(Organisations, on_delete=models.CASCADE)
 
        def __str__(self):
            return f'{self.name}'
 
        class Meta:
            verbose_name = "Клиент"
            verbose_name_plural = "Клиенты"
**Views.py**

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
35
from django.shortcuts import render, redirect, get_object_or_404
    from django.views.decorators.http import require_POST
 
    from Warehouse.models import Products
 
    from .cart import Cart
    from .forms import CartAddProductForm
 
 
    @require_POST
    def cart_add(request, product_id):
        cart = Cart(request)
        product = get_object_or_404(Products, id=product_id)
        form = CartAddProductForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            cart.add(product=product, quantity=cd['quantity'],
                                    update_quantity=cd['update'])
        return redirect('cart_detail')
 
    def cart_remove(request, product_id):
        cart = Cart(request)
        product = get_object_or_404(Products, id=product_id)
        cart.remove(product)
        return redirect('cart_detail')
 
    def cart_detail(request):
        cart = Cart(request)
        for item in cart:
            item['update_quantity_form'] = CartAddProductForm(
                                            initial={
                                                'quantity': item['quantity'],
                                                'update': True
                                            })
        return render(request, 'cart/detail.html', {'cart': cart})

**forms.py**

Python
1
2
3
4
5
6
7
8
from  django import forms
    
    PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 21)]
    
    #Добавление товара в корзину
    class CartAddProductForm(forms.Form):
        quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES, coerce=int)
        update = forms.BooleanField(required=False, initial=False, widget=forms.HiddenInput)
**cart.py**

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import OnliCas.settings
    from decimal import Decimal
    from Warehouse.models import Products
 
    
 
    class Cart(object):
        def __init__(self, request):
            # Инициализация корзины пользователя
            self.session = request.session
            cart = self.session.get(OnliCas.settings.CART_SESSION_ID)
            if not cart:
                # Сохраняем корзину пользователя в сессию
                cart = self.session[OnliCas.settings.CART_SESSION_ID] = {}
            self.cart = cart
 
        # Добавление товар в корзину пользователя
        # или обновление количества товаров
        def add(self, product, quantity=1, update_quantity=False):
            product_id = str(product.id)
            if product_id not in self.cart:
                self.cart[product_id] = {'quantity': 0,
                                        'price': str(product.price)}
            if update_quantity:
                self.cart[product_id]['quantity'] = quantity
            else:
                self.cart[product_id]['quantity'] += quantity
            self.save()
 
            # Сохранение данных в сессию
        def save(self):
            self.session[OnliCas.settings.CART_SESSION_ID] = self.cart
            # Указываем, что сессия изменена
            self.session.modified = True
 
            # Удаление товара из корзины
        def remove(self, product):
            product_id = str(product.id)
            if product_id in self.cart:
                del self.cart[product_id]
                self.save()
 
 
        # Итерация по товарам
        def __iter__(self):
            product_ids = self.cart.keys()
            products = Products.objects.filter(id__in=product_ids)
            for product in products:
                self.cart[str(product.id)]['product'] = product
 
            for item in self.cart.values():
                item['price'] = Decimal(item['price'])
                item['total_price'] = item['price'] * item['quantity']
                yield item
 
        # Количество товаров
        def __len__(self):
            return sum(item['quantity'] for item in self.cart.values())
 
        def get_total_price(self):
            return sum(Decimal(item['price'])*item['quantity'] for item in self.cart.values())
 
        def clear(self):
            del self.session[OnliCas.settings.CART_SESSION_ID]
            self.session.modified = True
**settings.py**

Python
1
2
    # session settings
    CART_SESSION_ID = 'cart'
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2022, 06:28
Ответы с готовыми решениями:

TypeError: expected string or bytes-like object (При добавлении в БД Django)
def get_content(response): html = response.json() soup = BeautifulSoup(html, 'html.parser') ...

AttributeError: 'DeferredAttribute' object has no attribute 'name' | Django
Это файл модели. class artsl(models.Model): obrs = models.CharField('Название', null=True, max_length=250) scores =...

Field 'id' expected a number but got 'palto'
Ошибка Field 'id' expected a number but got 'palto'. НЕ могу понять из-за чего ошибка cart.py from django.conf import...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2022, 06:28
Помогаю со студенческими работами здесь

ValueError: Field 'receiver_id' expected a number but got ''
Здравствуйте. Пытаюсь создать функцию добавления нового поста на странице пользователя. Но при попытке применить миграции возникает ошибка:...

TypeError: expected string or bytes-like object
Привет, в универе задали сделать сравнение алгоритмов сортировки и прикрутить к этому всему экселевскую табличку со знанчениями и прочим(1...

TypeError: int() argument must be a string, a bytes-like object or a number, not 'User'
Решил добавить блогу автора комментария, но когда ввожу сам комментарий выдаёт ошибку TypeError: int() argument must be a string, a...

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
Есть у меня цикл, который определяет скорость всех подключенных мпользователей в списке: for player in players: x =...

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'Category'
Добрый день! Занимаюсь по видео selfedu и возникла следующая ошибка Environment: Request Method: GET Request URL:...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru