简体   繁体   English

django,mypy:查询集,选择。 错误:不兼容的类型

[英]django, mypy : queryset, choices. error: Incompatible types

We have:我们有:

In models.py在模型.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. in serializers.py在 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')

When i check it by mypy:当我通过 mypy 检查它时:

resources/serializers.py:67: error: Incompatible types in assignment (expression has type "Union[Any, object]", variable has type "int") resources/serializers.py:67:错误:赋值中的类型不兼容(表达式的类型为“Union [Any, object]”,变量的类型为“int”)

  1. if in serializers.py如果在 serializers.py
    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='dictionary')

Check it by mypy:通过 mypy 检查它:

resources/serializers.py:68: error: Incompatible type for lookup 'language_id': (got "Union[Any, object]", expected "Union[str, int]")资源/serializers.py:68:错误:查找'language_id'的类型不兼容:(得到“Union [Any,object]”,预期“Union [str,int]”)

3) 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')

Check it:核实:

resources/serializers.py:67: error: Incompatible types in assignment (expression has type "Union[Any, object]", variable has type "Union[str, int]") resources/serializers.py:67:错误:赋值中的类型不兼容(表达式的类型为“Union[Any, object]”,变量的类型为“Union[str, int]”)

What`s wrong?怎么了?

mypy.ini: 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

error was in settings.SERVER['current_language_id']错误在settings.SERVER['current_language_id']

right way:正确的路:

getattr(settings.SERVER, 'current_language_id')

Now mypy all right passed现在 mypy 没事过去了

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM