__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)
Возможно, вы столкнулись с этой проблемой из-за метода __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__()
должен возвращать строку; поэтому не забудьте привести значение поля, если оно не является строкой.