NBa*_*con 2 python django django-models
如果这是一个愚蠢的问题,我很抱歉,我对 python 和 django 还很陌生。
我正在学习 django 教程,我们正在创建一个假电影网站,按流派、标题等列出电影。
我目前正在尝试覆盖__str__models.py 文件中的函数,因此它不会显示流派 (1),而是显示实际流派(例如“动作”)。
这是我的 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)
Run Code Online (Sandbox Code Playgroud)
然而,vscode 强调
def __str__ (self):
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在它上面时,它告诉我:
str不返回 str pylint(E0307: 无效的 -str- 返回
我尝试寻找其他解决方案,但我找不到一个似乎符合我的情况的解决方案,所以如果这个问题已在其他地方解决,我深表歉意,而且我太无能,无法理解这个问题。
谢谢你的耐心!
这个问题有几个很好的说明,说明了为什么在过度依赖 IDE 和pylint. 我有两个建议:
该pylint错误只是一个警告,表明您的代码可能有问题 - 这不是绝对的事实。错误E0307 说:
__str__当方法返回的内容不是字符串时使用。
pylint如果它说“当检查器无法确定您正在返回一个字符串时”,那就更准确了。在本例中,这是因为它无法识别 DjangoCharField实际上会返回有效的字符串实例。如果您运行代码,您现有的__str__方法将完美运行 - 无论您怎么pylint想。
您可以通过强制返回值看起来像字符串来解决此问题,例如:
return str(self.name)
Run Code Online (Sandbox Code Playgroud)
或者
return f"{self.name}"
Run Code Online (Sandbox Code Playgroud)
但在 pylint 中禁用对此行的检查同样有效,并了解它报告错误的原因。在不了解问题的情况下仅应用 Stack Overflow 上找到的修复程序将使您将来的代码难以调试。
您的代码中还有第二个完全不相关的问题,稍后会导致您出现问题,那就是这一行:
from tkinter import CASCADE
Run Code Online (Sandbox Code Playgroud)
我非常有信心它已由您的 IDE 插入,而无需您显式添加它,因为您尝试CASCADE在您的ForeignKey. 这是 IDE 试图提供的帮助 - 不幸的是,它导入了一些完全无用的东西,这可能会在您尝试部署代码时给您带来问题。
这两者都强调了一个重要原则:不要依赖 IDE 或 linter。它们不能替代理解您自己的代码。
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |