__str__ возвращает нестроку (тип NoneType) в панели администратора Django

Я использую Django и получаю ошибку в панели администратора "TypeError at /admin/notifications/notification/5/change/ str возвращает нестроку (тип NoneType)". Почему я столкнулся с этой ошибкой?

Модель

class Notification(models.Model):
TYPES = ((1, 'Reports'), (2, 'User Accounts'), (3, 'Inbox'), (4, 'Attributes Builder'))
incident_report = models.ForeignKey('incidentreport.IncidentGeneral', on_delete=models.CASCADE, blank=True, null=True)
incident_remarks = models.ForeignKey('incidentreport.IncidentRemark', on_delete=models.CASCADE, blank=True, null=True)
sender = models.ForeignKey('accounts.User', on_delete=models.CASCADE, blank=True, null=True, related_name="noti_from_user")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="noti_user")
responder = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, related_name="noti_responder")
notification_type = models.IntegerField(choices=TYPES)
remarks = models.CharField(max_length=90, blank=True)
text_preview = models.CharField(max_length=90, blank=True)
date = models.DateTimeField(auto_now_add=True)
is_seen = models.BooleanField(default=False)

enter image description here

Возможно, вы столкнулись с этой проблемой из-за метода __str__() вашей модели. (трудно сказать, поскольку вы не привели весь код)

Зачем использовать __str__():

Если вы хотите, чтобы Django показывал определенное поле при возврате экземпляра вашей модели, вы можете использовать метод модели __str__(). (Посмотрите объяснение в GeeksForGeeks)

Избежать ошибки:

Переопределяя метод __str__(), вы должны учитывать, что иногда нужное вам поле может быть None. Для того чтобы избежать подобной проблемы, вы можете рассмотреть следующий подход:

Models.py:

class Notification(models.Model):
.
.
.
    def __str__(self):
        return self.name if self.name else str(self.id)
  • Помните, что __str__() должен возвращать строку; поэтому не забудьте привести значение поля, если оно не является строкой.
Вернуться на верх