python - 如何覆盖 models.py 中的 __str__ ?

标签 python django django-models

如果这是一个愚蠢的问题,我很抱歉,我对 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 等工具之前理解代码很重要。我有两个建议:

  1. pylint 错误只是一个警告,表明您的代码可能有问题 - 这不是绝对的事实。 E0307 error says :

    Used when a __str__ method returns something which is not a string.

    如果它说“当 pylint 检查器无法确定您返回的是字符串时”,那就更准确了。在本例中,这是因为它无法识别 Django CharField 实际上会返回有效的字符串实例。如果您运行代码,您现有的 __str__ 方法将完美地工作 - 无论 pylint 的想法如何。

    您可以通过强制返回值看起来像字符串来解决此问题,例如:

    return str(self.name)
    

    return f"{self.name}"
    

    但它对 disable the check 同样有效对于 pylint 中的这一行,了解为什么报告错误。在不了解问题的情况下仅应用 Stack Overflow 上找到的修复程序将使您将来的代码难以调试。

  2. 您的代码中还有第二个完全不相关的问题,稍后会导致您出现问题,那就是这一行:

    from tkinter import CASCADE
    

    我非常有信心它已由您的 IDE 插入,而无需您显式添加它,因为您尝试在 ForeignKey 中使用 CASCADE。这是 IDE 试图提供帮助 - 不幸的是它导入了一些完全无用的东西,可以cause you problems当您尝试部署代码时。

这两者都强调了一个重要原则:不要依赖 IDE 或 linter。它们不能替代理解您自己的代码。

关于python - 如何覆盖 models.py 中的 __str__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71986184/

相关文章:

django - 如何选择多对多关系中未引用的所有对象

django - 在Django中使用ForeignKey有什么优点?

python - Django-CMS 和多个菜单

django - 如何将 Django 的 GenericForeignKey 限制为模型列表?

python - 获取django模板中的模板名称

python - Django 1.10 - 无法将关键字 '__' 解析为字段。不允许加入 '__'

mysql - Django子查询问题 "Subquery returns more than 1 row"

python - Django 复杂查询与过滤器连接表

python - 将类与 Numba 一起使用时出现签名错误

python - 如何在 python 中使用 opencv 按下按键时准确地从相机流中捕获帧?