首页 > 解决方案 > Python(Django):'self.text'不可订阅

问题描述

我正在按照“初学者的Django”一书学习Django,有一个奇怪的问题。下面的代码片段确实有效,但 Pylint 一直向我显示错误,我知道错误发生了。但作者对此无动于衷。请问有人知道为什么吗?代码片段来自我的 app 文件夹的 models.py。

from django.db import models

# Create your models here.
class Post(models.Model):
    text = models.TextField()

    def __str__(self):
        return self.text[:50]

我的 vscode 编辑器中的 pylint 错误消息是 - Value 'self.text' is unsubscriptable

我的环境:Win 10、Python 3.6、Django 3.0.1

标签: pythondjangodjango-models

解决方案


下面的代码片段确实有效,但 Pylint 不断向我显示错误。请问有人知道为什么吗?

是的,因为 Pylint 不“理解”在模型和字段的元类中实现的逻辑。因此,它认为这self.text将返回TextField对象,该对象确实不可下标。然而,元将为self.text.

有一个pylint-django包 [pypi]可以更好地理解 Django 的工作原理,尽管它仍然是“有限的”。作为它列出的功能之一:

  • 修复 pylint 对 Model 和 Form 字段属性类型的了解。

所以通常它会解决这个问题。尽管对于例如自定义模型字段,它可能仍然会失败。


推荐阅读