Условный внутри def __str __ (self) in Django - PullRequest
0 голосов
/ 05 мая 2020

У меня есть эта модель:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile', null=True, blank=True)
    name = models.CharField(max_length=120, null=True, blank=True)

Как видите, и user, и name допускают значение NULL. Это связано с тем, что профиль может быть связан с пользователем или нет. Если нет, то предоставляется только поле name. Как я могу вернуть name, если профиль не связан с пользователем, и свойства user.name, если это так? Это:

    def __str__(self):
        return
        if self.user:
            f"{self.user}'s profile"
        else:
            self.name

возвращает ошибку __str__ returned non-string (type NoneType).

Решение

В итоге я использовал немного измененную версию @ Принятый ответ Max Maly sh:

def __str__(self):
        return f"{self.user}'s profile" if self.user_id != None else f"{self.name}"

1 Ответ

2 голосов
/ 05 мая 2020
def __str__(self):
    if self.user:
        return f"{self.user}'s profile"
    else:
        return f"{self.name}"

или

def __str__(self):
    return f"{self.user}'s profile" if self.user else f"{self.name}"
...