[英]django, mypy : queryset, choices. error: Incompatible types
我們有:
在模型.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)
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 檢查它時:
resources/serializers.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='dictionary')
通過 mypy 檢查它:
資源/serializers.py:68:錯誤:查找'language_id'的類型不兼容:(得到“Union [Any,object]”,預期“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')
核實:
resources/serializers.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
錯誤在settings.SERVER['current_language_id']
正確的路:
getattr(settings.SERVER, 'current_language_id')
現在 mypy 沒事過去了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.