TypeError __str__ возвращает нестроку (тип int)
Я пытаюсь написать приложение для создания сценария, но сталкиваюсь с проблемой, когда добавляю информацию в модель. Мои модели выглядят следующим образом:
class Screenplay(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=100)
def __str__(self):
return self.title
class Block(models.Model):
class BlockTypes(models.IntegerChoices):
HEADING = 1, 'HEADING'
DESCRIPTION = 2, 'DESCRIPTION'
CHARACTER = 3, 'CHARACTER'
DIALOGUE = 4, 'DIALOGUE'
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
text = models.TextField()
type = models.PositiveSmallIntegerField(
choices=BlockTypes.choices,
default=BlockTypes.HEADING
)
screenplay = models.ForeignKey(Screenplay, on_delete=models.CASCADE, related_name='blocks')
def __str__(self):
return self.type
Когда я захожу в свой backend api (localhost:8000/api/screenplays), я вижу свои образцы сценариев, которые выглядят следующим образом:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"uuid": "SAMPLE - UUID",
"title": "SAMPLE - TITLE",
"blocks": []
},
]
Ошибка, о которой я написал в заголовке, появляется, когда я действительно добавляю блок в сценарий. В моем api это выглядит как "blocks": [], но когда я ПОСТАВЛЯЮ блок в определенный скринплей, он ломается. Я просто не понимаю, в чем на самом деле проблема, в моем models.py или в какой-то другой части моего приложения django. Нужно ли мне добавить блоки в мою модель Screenplay? В любом случае, любой совет был бы замечательным на данный момент.
__str__ должен возвращать string, а вы возвращаете целое число, т.е. PositiveSmallIntegerField.
Преобразуйте это значение в string в вашей Block модели как
def __str__(self):
return str(self.type)
Подробнее str[Django-doc]