[CASE array_field_descriptor_access] from django.db import models from django.contrib.postgres.fields import ArrayField class User(models.Model): array = ArrayField(base_field=models.Field()) user = User() reveal_type(user.array) # E: Revealed type is 'builtins.list*[Any]' [/CASE] [CASE array_field_base_field_parsed_into_generic_typevar] from django.db import models from django.contrib.postgres.fields import ArrayField class User(models.Model): members = ArrayField(base_field=models.IntegerField()) members_as_text = ArrayField(base_field=models.CharField(max_length=255)) user = User() reveal_type(user.members) # E: Revealed type is 'builtins.list*[builtins.int]' reveal_type(user.members_as_text) # E: Revealed type is 'builtins.list*[builtins.str]' [/CASE] [CASE test_model_fields_classes_present_as_primitives] from django.db import models class User(models.Model): id = models.AutoField(primary_key=True) small_int = models.SmallIntegerField() name = models.CharField(max_length=255) slug = models.SlugField(max_length=255) text = models.TextField() user = User() reveal_type(user.id) # E: Revealed type is 'builtins.int*' reveal_type(user.small_int) # E: Revealed type is 'builtins.int*' reveal_type(user.name) # E: Revealed type is 'builtins.str*' reveal_type(user.slug) # E: Revealed type is 'builtins.str*' reveal_type(user.text) # E: Revealed type is 'builtins.str*' [/CASE] [CASE test_model_field_classes_from_existing_locations] from django.db import models from django.contrib.postgres import fields as pg_fields from decimal import Decimal class Booking(models.Model): id = models.AutoField(primary_key=True) time_range = pg_fields.DateTimeRangeField(null=False) some_decimal = models.DecimalField(max_digits=10, decimal_places=5) booking = Booking() reveal_type(booking.id) # E: Revealed type is 'builtins.int*' reveal_type(booking.time_range) # E: Revealed type is 'Any' reveal_type(booking.some_decimal) # E: Revealed type is 'decimal.Decimal*' [/CASE] [CASE test_add_id_field_if_no_primary_key_defined] from django.db import models class User(models.Model): pass reveal_type(User().id) # E: Revealed type is 'builtins.int' [/CASE] [CASE test_do_not_add_id_if_field_with_primary_key_True_defined] from django.db import models class User(models.Model): my_pk = models.IntegerField(primary_key=True) reveal_type(User().my_pk) # E: Revealed type is 'builtins.int*' reveal_type(User().id) # E: Revealed type is 'Any' [/CASE] [CASE test_meta_nested_class_allows_subclassing_in_multiple_inheritance] from typing import Any from django.db import models class Mixin1(models.Model): class Meta: abstract = True class Mixin2(models.Model): class Meta: abstract = True class User(Mixin1, Mixin2): pass [/CASE] [CASE test_inheritance_from_abstract_model_does_not_fail_if_field_with_id_exists] from django.db import models class Abstract(models.Model): class Meta: abstract = True class User(Abstract): id = models.AutoField(primary_key=True) [/CASE] [CASE standard_it_from_parent_model_could_be_overridden_with_non_integer_field_in_child_model] from django.db import models import uuid class ParentModel(models.Model): pass class MyModel(ParentModel): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) reveal_type(MyModel().id) # E: Revealed type is 'uuid.UUID*' [/CASE] [CASE blank_and_null_char_field_allows_none] from django.db import models class MyModel(models.Model): nulltext=models.CharField(max_length=1, blank=True, null=True) MyModel(nulltext="") MyModel(nulltext=None) MyModel().nulltext=None reveal_type(MyModel().nulltext) # E: Revealed type is 'Union[builtins.str, None]' [/CASE] [CASE blank_and_not_null_charfield_does_not_allow_none] from django.db import models class MyModel(models.Model): notnulltext=models.CharField(max_length=1, blank=True, null=False) MyModel(notnulltext=None) # Should allow None in constructor MyModel(notnulltext="") MyModel().notnulltext = None # E: Incompatible types in assignment (expression has type "None", variable has type "Union[str, int, Combinable]") reveal_type(MyModel().notnulltext) # E: Revealed type is 'builtins.str*' [/CASE]