【发布时间】:2019-06-18 12:35:32
【问题描述】:
我已经创建了基于 CharField 的自定义 Django 模型字段子类,但它使用 to_python 来确保返回的模型对象具有更复杂的对象(有些是列表,有些是具有特定格式的字典等)——我' m 使用 MySQL,因此某些 PostGreSql 字段类型不可用。
一切都很好,但 Pylint 认为这些字段中的所有值都是字符串,因此我在使用这些模型的代码上收到很多“不支持的成员资格测试”和“不可订阅的对象”警告。我可以单独禁用这些,但我更愿意让 Pylint 知道这些模型返回某些对象类型。类型提示没有帮助,例如:
class MealPrefs(models.Model):
user = ...foreign key...
prefs: dict = custom_fields.DictOfListsExtendsCharField(
default={'breakfast': ['cereal', 'toast'], 'lunch': []},
)
我知道某些内置的 Django 字段会为 Pylint(CharField、IntegerField)返回正确的类型,并且某些其他扩展已经找到了指定其类型的方法,因此 Pylint 很高兴(MultiSelectField)但深入研究他们的代码,我可以' t找出指定返回类型的“魔法”在哪里。
(注意:这个问题与 Django 表单字段的 INPUT:type 无关)
谢谢!
【问题讨论】:
-
咨询了stackoverflow.com/questions/51830993/…,但没有重复或指定答案。
-
警告来自哪里的代码?您是否愿意在更高级别禁用任何不需要的 pylint 警告?或者您是否想通知 pylint 期望返回类型,然后在出现意外情况时捕获。在这种情况下,我通常只是在更高级别禁用:-)
-
我可以在更高级别禁用,但我试图了解是什么让 pylint 了解内置 Django 字段的正确类型,但不是我创建的字段。
-
您可能应该添加您使用插件pylint-django 的信息。 (或者不是?)
-
我不知道这个插件。如果您将其写为答案,将这样做并乐意奖励赏金@hynekcer。但是即使没有插件,某些代码也能正常工作
标签: django python-3.x django-models pylint python-typing