mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-06 12:14:28 +08:00
60 lines
1.2 KiB
Plaintext
60 lines
1.2 KiB
Plaintext
[CASE test_typechecking_for_model_subclasses]
|
|
from django.db import models
|
|
|
|
class A(models.Model):
|
|
pass
|
|
class B(models.Model):
|
|
b_attr = 1
|
|
pass
|
|
class C(A):
|
|
pass
|
|
|
|
def service(a: A) -> int:
|
|
pass
|
|
|
|
b_instance = B()
|
|
service(b_instance) # E: Argument 1 to "service" has incompatible type "B"; expected "A"
|
|
|
|
a_instance = A()
|
|
c_instance = C()
|
|
service(a_instance)
|
|
service(c_instance)
|
|
[/CASE]
|
|
|
|
|
|
[CASE fail_if_no_such_attribute_on_model]
|
|
from django.db import models
|
|
|
|
class B(models.Model):
|
|
b_attr = 1
|
|
pass
|
|
|
|
b_instance = B()
|
|
reveal_type(b_instance.b_attr) # E: Revealed type is 'builtins.int'
|
|
|
|
reveal_type(b_instance.non_existent_attribute)
|
|
b_instance.non_existent_attribute = 2
|
|
[out]
|
|
main:10: error: Revealed type is 'Any'
|
|
main:10: error: "B" has no attribute "non_existent_attribute"
|
|
main:11: error: "B" has no attribute "non_existent_attribute"
|
|
[/CASE]
|
|
|
|
|
|
[CASE ignore_missing_attributes_if_setting_is_passed]
|
|
from django.db import models
|
|
|
|
class B(models.Model):
|
|
pass
|
|
|
|
b_instance = B()
|
|
reveal_type(b_instance.non_existent_attribute) # E: Revealed type is 'Any'
|
|
b_instance.non_existent_attribute = 2
|
|
|
|
[env MYPY_DJANGO_CONFIG=${MYPY_CWD}/mypy_django.ini]
|
|
|
|
[file mypy_django.ini]
|
|
[[mypy_django_plugin]
|
|
ignore_missing_model_attributes = True
|
|
|
|
[/CASE] |