当前位置: 首页 > 知识库问答 >
问题:

django,mypy:queryset,选择。错误:不兼容的类型

郎正平
2023-03-14

我们有:

在models.py

class Language(models.IntegerChoices):
    en = 1
    ru = 2

class Translation(models.Model):
    language_id = models.PositiveIntegerField(choices=Language.choices)
    mnemonic = models.CharField(max_length=255)
    translation = models.CharField(max_length=255)
  1. 在serializers.py
    66    def get_translations(self, obj):
    67        language: int = self.initial_data.get('language') or settings.SERVER['current_language_id']
    68        common_public = Translation.objects.filter(language_id=language).exclude(mnemonic__startswith='dictionary')

当我通过mypy检查它时:

资源/序列化程序。py:67:错误:赋值中的类型不兼容(表达式的类型为“Union[Any,object]”,变量的类型为“int”)

    66    def get_translations(self, obj):
    67        language: Union[Any, object] = self.initial_data.get('language') or settings.SERVER['current_language_id']
    68        common_public = Translation.objects.filter(language_id=language).exclude(mnemonic__startswith='html" target="_blank">dictionary')

请通过mypy进行检查:

资源/serializers.py:68:错误:查找'language_id'的不兼容类型:(得到了"Union[any,对象]",预期为"Union[str, int]")

3)

66    def get_translations(self, obj):
67        language: Union[str, int] = self.initial_data.get('language') or settings.SERVER['current_language_id']
68        common_public = Translation.objects.filter(language_id=language).exclude(mnemonic__startswith='dictionary')

检查它:

资源/序列化程序。py:67:错误:赋值中的类型不兼容(表达式的类型为“Union[Any,object]”,变量的类型为“Union[str,int]”)

怎么了?

mypy.ini:

[mypy]
python_version = 3.8
mypy_path = ./stubs

check_untyped_defs = True
disallow_any_generics = True
disallow_untyped_calls = True
disallow_untyped_decorators = True
ignore_errors = False
ignore_missing_imports = True
implicit_reexport = False
strict_optional = True
strict_equality = True
no_implicit_optional = True
warn_unused_ignores = True
warn_redundant_casts = True
warn_unused_configs = True
warn_unreachable = True
warn_no_return = True
plugins = mypy_django_plugin.main

[mypy.plugins.django-stubs]
django_settings_module = server.settings

[mypy-*.migrations.*]
ignore_errors = True

共有1个答案

滑畅
2023-03-14

设置中出现错误。服务器['current\u language\u id']

正确的方式:

getattr(settings.SERVER,“当前语言id”)

现在Mypy通过了

 类似资料:
  • 我一直试图编译这个简单的警报对话框,以便在用户单击提交按钮时显示。编译代码时会弹出一条错误消息: 错误:(33,74)错误:不兼容的类型: 这个类叫做Login_Activity,它扩展了BaseActivity,它扩展了Activity。

  • 我的项目使用gwt maven hibernate.并在我的项目中使用一个库来创建会话工厂,使用 configuration configuration = new annotation configuration();session factory = configuration . configure(config file)。buildSessionFactory(); 并将其返回给我的应用

  • 问题内容: 我正在学习Java。我试图运行代码,但出现此错误:。它向我显示错误的代码部分。 为什么会这样呢? 问题答案: 这是因为在类中不能有两个具有相同名称但返回类型不同的方法。 子类不能使用与返回类型不同的超类中已经存在的方法相同的名称声明方法。 但是,子类可以声明具有与超类相同的签名的方法。我们称此为“覆盖”。 你需要这个 要么 一个好的做法是通过注释标记覆盖的方法:

  • 我有下面的Kotlin代码。一个名为的密封类和两个对象类和继承自密封类。我在is Cat情况下的子句中得到这个错误。 为什么会给出这个错误?如何使用Kotlin中的密封类来进行这种类型的操作?密封类是做多态的好选择吗?

  • 我的函数类似于以下简化代码示例: 当我运行Mypy(版本0.52)我得到这个错误: 错误指向代码示例中的倒数第二行。为什么mypy返回此错误?我的代码是无效的(以任何方式)还是一些mypy错误?

  • 我正在尝试使用Apache OpenNLP API创建一个标记器。我已经从他们的网站中提取了代码,但在Tokenize类中,以下代码行出现了“不兼容类型”错误: Tokenize Tokenizer=new TokenizerME(模型); 有人知道这个错误的原因吗?因为看起来他们不应该不兼容? 这是主要类: 这是具有错误的Tokenize类: