Ошибка __str__ вернула нестроку (тип NoneType)

Я знаю, что эта ошибка является классической. Но я столкнулся с более сложной проблемой :

enter image description here

Это моя модель. Я просмотрел все темы об этой распространенной проблеме, пытаюсь решить ее, но не получается. Я не могу добавить stafftimeslot в панели администратора.

Можете ли вы мне помочь?

Вот мой models.py :

from django.db import models
from django.utils import timezone
from staffs.models import Staff
from students.models import Student

TIMESLOT_LIST = (
        (0, '09:00 – 09:30'),
        (1, '09:30 – 10:00'),
        (2, '10:00 – 10:30'),
        (3, '10:30 – 11:00'),
        ...
    )

class StaffTimeSlots(models.Model):
    staff = models.ForeignKey(Staff, null=True, on_delete=models.CASCADE)
    date = models.DateField(default=timezone.now)
    time_slot = models.CharField(max_length=2, choices=TIMESLOT_LIST)


    def get_absolute_url(self):
        return reverse('stafftimeslot_detail', kwargs={"pk": self.pk})

    def __str__(self):
        return str(self.date)

EDIT : Когда я удаляю ForeignKey, он работает, но когда я повторно использую его, он больше не работает. Поэтому я попытался заменить на OnetoOneField и ManytoManyField и столкнулся с той же проблемой. Похоже, что модель не принимает модельные отношения. Как я могу связать эту модель с моделью Staff с помощью внешнего ключа?

Ваша дата может быть пустой, поэтому верните что-нибудь другое, если это так

def __str__(self):
    return str(self.date) if self.date else "no date available"

Я устранил проблему.

Проблема возникает из-за модели Staff. Вот она :

class Staff(models.Model):

    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL)
    def __str__(self):
        if self.user is not None:
            return self.user.firstname + " " + self.user.lastname

В моей базе данных не было записи Staff, унаследованной от класса User. Поэтому я добавляю else вот так :

def __str__(self):
    if self.user is not None:
        return self.user.firstname + " " + self.user.lastname
    else:
        return "Unknown"
Вернуться на верх