如何修复 Python Django TypeError

How to fix Python Django TypeError

我有一个简单的模型 class,我想 return 我的 Django Admin 中一个字段的值。

来自终端的错误日志

TypeError: __str__ returned non-string (type NoneType)

models.py

class Solution(models.Model):
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    error = models.ForeignKey(Error, on_delete=models.CASCADE)

    def __str__(self):
        return self.error + " fixed by " + self.user

我已经找到解决办法了。将解决方案模型 Class 替换为以下代码片段将修复错误。

models.py

class Solution(models.Model):
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    error = models.ForeignKey(Error, on_delete=models.CASCADE)

    def __str__(self):
        return "Solution for " + str(self.error) + " by " + str(self.user)

通常最好使用 string formatting [pep-498] or literal string interpolation [pep-498],因为这是一个更强大的工具,会自动调用 str(…)。最后它也更具可读性:

class Solution(models.Model):
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    error = models.ForeignKey(Error, on_delete=models.CASCADE)

    def __str__(self):
        return <b>f'</b>{self.error} fixed by {self.user}<b>'</b>