如果这是一个愚蠢的问题,我很抱歉,我对 python 和 django 还很陌生。
我正在学习 django 教程,我们正在创建一个假电影网站,按流派、标题等列出电影。
我目前正在尝试覆盖 models.py 文件中的 __str__
函数,因此它不会显示流派 (1),而是显示实际流派(例如“ Action ”)。
这是我的 models.py 目前的样子:
from tkinter import CASCADE
from django.db import models
from django.utils import timezone
# Create your models here.
class Genre(models.Model):
name = models.CharField(max_length=255)
def __str__ (self):
return self.name
class Movie(models.Model):
title = models.CharField(max_length=255)
release_year = models.IntegerField()
number_in_stock = models.IntegerField()
daily_rate = models.FloatField()
genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
date_created = models.DateTimeField(default=timezone.now)
但是,vscode 强调了
def __str__ (self):
当我将鼠标悬停在它上面时,它会告诉我:
str does not return str pylint(E0307: invalid -str- returned
我尝试寻找其他解决方案,但找不到适合我的情况的解决方案,因此如果其他地方已经解决了这个问题,我深表歉意,而且我太无能,无法理解这个问题。
感谢您的耐心等待!
最佳答案
这个问题有几个很好的例子,说明了为什么在过度依赖 IDE 和 pylint
等工具之前理解代码很重要。我有两个建议:
pylint
错误只是一个警告,表明您的代码可能有问题 - 这不是绝对的事实。E0307
error says :Used when a
__str__
method returns something which is not a string.如果它说“当
pylint
检查器无法确定您返回的是字符串时”,那就更准确了。在本例中,这是因为它无法识别 DjangoCharField
实际上会返回有效的字符串实例。如果您运行代码,您现有的 __str__ 方法将完美地工作 - 无论pylint
的想法如何。您可以通过强制返回值看起来像字符串来解决此问题,例如:
return str(self.name)
或
return f"{self.name}"
但它对 disable the check 同样有效对于 pylint 中的这一行,了解为什么报告错误。在不了解问题的情况下仅应用 Stack Overflow 上找到的修复程序将使您将来的代码难以调试。
您的代码中还有第二个完全不相关的问题,稍后会导致您出现问题,那就是这一行:
from tkinter import CASCADE
我非常有信心它已由您的 IDE 插入,而无需您显式添加它,因为您尝试在
ForeignKey
中使用CASCADE
。这是 IDE 试图提供帮助 - 不幸的是它导入了一些完全无用的东西,可以cause you problems当您尝试部署代码时。
这两者都强调了一个重要原则:不要依赖 IDE 或 linter。它们不能替代理解您自己的代码。
关于python - 如何覆盖 models.py 中的 __str__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71986184/