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]

Вернуться на верх