Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 202

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'Category'

14.03.2023, 17:36. Показов 1381. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день!
Занимаюсь по видео selfedu и возникла следующая ошибка
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
 Environment:
 
 
Request Method: GET
Request URL: http://127.0.0.1:8000/api/v1/news_list/
 
Django Version: 4.1.7
Python Version: 3.10.0
Installed Applications:
['rest_framework',
 'news.apps.NewsConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']
 
 
 
Traceback (most recent call last):
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\django\core\handlers\exception.py", line 56, in inner
    response = get_response(request)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\django\views\decorators\csrf.py", line 55, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\django\views\generic\base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Usersариса\PycharmProjects\DRFproj\drfproj\news\views.py", line 15, in get
    return Response({'posts': NewSerializer(new, many=True).data})  # converts a list of values to a list of dicts
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\serializers.py", line 768, in data
    ret = super().data
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\serializers.py", line 253, in data
    self._data = self.to_representation(self.instance)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
    return [
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
    self.child.to_representation(item) for item in iterable
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\serializers.py", line 522, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "C:\Usersариса\PycharmProjects\DRFproj\venv\lib\site-packages\rest_framework\fields.py", line 916, in to_representation
    return int(value)
 
Exception Type: TypeError at /api/v1/news_list/
Exception Value: int() argument must be a string, a bytes-like object or a real number, not 'Category'
При других методах запросов все работает также.

Совсем не понимаю, что неверно, с учетом, что делала все как в видеоролике.


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from django.forms import model_to_dict
from django.shortcuts import render
from rest_framework import generics
from .models import New
from .serializers import NewSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
 
 
# view responsible for processing requests
class NewAPIView(APIView):
 
    def get(self, request):
        new = New.objects.all()
        return Response({'posts': NewSerializer(new, many=True).data})  # converts a list of values to a list of dicts
 
    def post(self, request):
        serializer = NewSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
 
        return Response({'post': serializer.data})      # return data about adding article
 
    def put(self, request, *args, **kwargs):
        pk = kwargs.get("pk", None)
        if not pk:
            return Response({"error": "Method PUT is not allowed"})
 
        try:
            instance = New.objects.get(pk=pk)
        except:
            return Response({"error": "Object doesn't exists"})
 
        serializer = NewSerializer(data=request.data, instance=instance)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response({"post": serializer.data})
 
 
    def delete(self, request, *args, **kwargs):
        pk = kwargs.get("pk", None)
        if not pk:
            return Response({"error": "Method DELETE is not allowed"})
 
        try:
            instance = New.objects.get(pk=pk)
            instance.delete()
        except:
            return Response({"error": "Object doesn't exists"})
 
        return Response({"post": "delete post" + str(pk)})
 
# class NewAPIView(generics.ListAPIView):
#    queryset = New.objects.all()
#    serializer_class = NewSerializer
models.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from django.db import models
 
 
class New(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField(blank=True)
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    is_published = models.BooleanField(default=True)
    cat = models.ForeignKey('Category', on_delete=models.PROTECT, null=False)
 
    def __str__(self):
        return self.title
 
 
class Category(models.Model):
    name = models.CharField(max_length=100, db_index=True)
 
    def __str__(self):
        return self.name
serializers.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
from rest_framework import serializers
from .models import New
 
 
# class NewModel():
#     def __init__(self, title, content):
#         self.title = title
#         self.content = content
 
# serializer responsible for processing data
class NewSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=255),
    content = serializers.CharField()
    time_create = serializers.DateTimeField(read_only=True)
    time_update = serializers.DateTimeField(read_only=True)
    is_published = serializers.BooleanField(default=True)
    cat = serializers.IntegerField()
 
    def create(self, validated_data):
        return New.objects.create(**validated_data)
 
    def update(self, instance, validated_data):
        instance.title = validated_data.get("title", instance.title)
        instance.content = validated_data.get("content", instance.content)
        instance.time_update = validated_data.get("time_update", instance.time_update)
        instance.is_published = validated_data.get("is_published", instance.is_published)
        instance.cat_id = validated_data.get("cat_id", instance.cat_id)
        instance.save()     # save article in the database
        return instance
ошибка появляется на 915 строчке fields.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
class IntegerField(Field):
    default_error_messages = {
        'invalid': _('A valid integer is required.'),
        'max_value': _('Ensure this value is less than or equal to {max_value}.'),
        'min_value': _('Ensure this value is greater than or equal to {min_value}.'),
        'max_string_length': _('String value too large.')
    }
    MAX_STRING_LENGTH = 1000  # Guard against malicious string inputs.
    re_decimal = re.compile(r'\.0*\s*$')  # allow e.g. '1.0' as an int, but not '1.2'
 
    def __init__(self, **kwargs):
        self.max_value = kwargs.pop('max_value', None)
        self.min_value = kwargs.pop('min_value', None)
        super().__init__(**kwargs)
        if self.max_value is not None:
            message = lazy_format(self.error_messages['max_value'], max_value=self.max_value)
            self.validators.append(
                MaxValueValidator(self.max_value, message=message))
        if self.min_value is not None:
            message = lazy_format(self.error_messages['min_value'], min_value=self.min_value)
            self.validators.append(
                MinValueValidator(self.min_value, message=message))
 
    def to_internal_value(self, data):
        if isinstance(data, str) and len(data) > self.MAX_STRING_LENGTH:
            self.fail('max_string_length')
 
        try:
            data = int(self.re_decimal.sub('', str(data)))
        except (ValueError, TypeError):
            self.fail('invalid')
        return data
 
    def to_representation(self, value):
        if value is not None:
            return int(value)
Очень прошу помочь! Второй день не могу разобраться, решишь одну проблему - она заменяется другой.
Быть может все горадзо проще...

Если требуется показать код каких-либо еще файлов - пишите, я скину



**При попытке изменить на стринг/риал также выводится ошибка
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2023, 17:36
Ответы с готовыми решениями:

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 number, not 'User'
Решил добавить блогу автора комментария, но когда ввожу сам комментарий выдаёт ошибку TypeError: int() argument must be a string, a...

TypeError: float() argument must be a string or a real number, not 'Future'
Доброго времени суток! Столкнулся с проблемой типа переменной Если кратко, в самом коде просто есть функция input При этом она...

3
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
14.03.2023, 18:27
https://www.django-rest-framew... relations/
У Вас в модели поле cat - внешний ключ на другую таблицу
Цитата Сообщение от konamityan Посмотреть сообщение
Python
1
cat = models.ForeignKey('Category', on_delete=models.PROTECT, null=False)
а в сериализаторе почемуто хотите его сделать int'ом
Цитата Сообщение от konamityan Посмотреть сообщение
Python
1
cat = serializers.IntegerField()
Если Вам нужен id Category в cat, то в сериализаторе нужно задавать
Python
1
cat = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
1
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 202
14.03.2023, 19:22  [ТС]
Решение проблемы: неправильное наименование переменных в сериализаторе (должно быть cat_id) и в модели (cat)

решение изменить поле в сериализаторе приводит к новой typeerror ошибке - "Категория" не итерируется
Python
1
cat = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
но большое спасибо за отклик, kazak, Вы очень помогли мне с поиском ошибки!
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
14.03.2023, 19:35
Цитата Сообщение от konamityan Посмотреть сообщение
"Категория" не итерируется
many=True попробуйте убрать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2023, 19:35
Помогаю со студенческими работами здесь

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

TypeError: cannot use a string pattern on a bytes-like object
#!/usr/bin env python import subprocess import optparse import re def get_arguments(): parser = optparse.OptionParser()...

TypeError: float() argument must be a string or a number, not 'dict_keys'
Всем доброго времени суток. Столкнулся с такой проблемой: TypeError Traceback (most recent call last) ...

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

TypeError: must be real number, not builtin_function_or_method
from math import ceil, tan, log, pow from math import ceil, tan, log, pow from math import ceil, tan, log, pow def...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru