diff --git a/django-stubs/contrib/auth/base_user.pyi b/django-stubs/contrib/auth/base_user.pyi index 1cd79b0..10f7c24 100644 --- a/django-stubs/contrib/auth/base_user.pyi +++ b/django-stubs/contrib/auth/base_user.pyi @@ -13,14 +13,12 @@ class BaseUserManager(models.Manager[_T]): def get_by_natural_key(self, username: Optional[str]) -> _T: ... class AbstractBaseUser(models.Model): - password: models.CharField = ... - last_login: models.DateTimeField = ... - is_active: models.BooleanField = ... + password = models.CharField(max_length=128) + last_login = models.DateTimeField(blank=True, null=True) + REQUIRED_FIELDS: List[str] = ... class Meta: ... def get_username(self) -> str: ... - def clean(self) -> None: ... - def save(self, *args: Any, **kwargs: Any) -> None: ... def natural_key(self) -> Tuple[str]: ... @property def is_anonymous(self) -> bool: ... diff --git a/django-stubs/contrib/auth/models.pyi b/django-stubs/contrib/auth/models.pyi index bbaeb89..9aab5ff 100644 --- a/django-stubs/contrib/auth/models.pyi +++ b/django-stubs/contrib/auth/models.pyi @@ -15,17 +15,17 @@ class PermissionManager(models.Manager): class Permission(models.Model): content_type_id: int - name: models.CharField = ... - content_type: models.ForeignKey = models.ForeignKey(ContentType, on_delete=models.CASCADE) - codename: models.CharField = ... + name = models.CharField(max_length=255) + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + codename = models.CharField(max_length=100) def natural_key(self) -> Tuple[str, str, str]: ... class GroupManager(models.Manager): def get_by_natural_key(self, name: str) -> Group: ... class Group(models.Model): - name: models.CharField = ... - permissions: models.ManyToManyField = models.ManyToManyField(Permission) + name = models.CharField(max_length=150) + permissions = models.ManyToManyField(Permission) def natural_key(self): ... _T = TypeVar("_T", bound=Model) @@ -39,7 +39,7 @@ class UserManager(BaseUserManager[_T]): ) -> _T: ... class PermissionsMixin(models.Model): - is_superuser: models.BooleanField = ... + is_superuser = models.BooleanField() groups: models.ManyToManyField = models.ManyToManyField(Group) user_permissions: models.ManyToManyField = models.ManyToManyField(Permission) def get_group_permissions(self, obj: None = ...) -> Set[str]: ... @@ -50,15 +50,17 @@ class PermissionsMixin(models.Model): class AbstractUser(AbstractBaseUser, PermissionsMixin): # type: ignore username_validator: UnicodeUsernameValidator = ... - username: models.CharField = ... - first_name: models.CharField = ... - last_name: models.CharField = ... - email: models.EmailField = ... - is_staff: models.BooleanField = ... - date_joined: models.DateTimeField = ... + + username = models.CharField(max_length=150) + first_name = models.CharField(max_length=30, blank=True) + last_name = models.CharField(max_length=150, blank=True) + email = models.EmailField(blank=True) + is_staff = models.BooleanField() + is_active = models.BooleanField() + date_joined = models.DateTimeField() + EMAIL_FIELD: str = ... USERNAME_FIELD: str = ... - def clean(self) -> None: ... def get_full_name(self) -> str: ... def get_short_name(self) -> str: ... def email_user(self, subject: str, message: str, from_email: str = ..., **kwargs: Any) -> None: ... diff --git a/test-data/typecheck/models/test_contrib_models.yml b/test-data/typecheck/models/test_contrib_models.yml new file mode 100644 index 0000000..6e36ebf --- /dev/null +++ b/test-data/typecheck/models/test_contrib_models.yml @@ -0,0 +1,22 @@ +- case: contrib_auth_model_fields + main: | + from django.contrib.auth.models import User + reveal_type(User().username) # N: Revealed type is 'builtins.str*' + reveal_type(User().password) # N: Revealed type is 'builtins.str*' + reveal_type(User().first_name) # N: Revealed type is 'builtins.str*' + reveal_type(User().last_name) # N: Revealed type is 'builtins.str*' + reveal_type(User().email) # N: Revealed type is 'builtins.str*' + reveal_type(User().is_staff) # N: Revealed type is 'builtins.bool*' + reveal_type(User().is_active) # N: Revealed type is 'builtins.bool*' + reveal_type(User().date_joined) # N: Revealed type is 'datetime.datetime*' + reveal_type(User().last_login) # N: Revealed type is 'Union[datetime.datetime, None]' + + from django.contrib.auth.models import Permission + reveal_type(Permission().name) # N: Revealed type is 'builtins.str*' + reveal_type(Permission().codename) # N: Revealed type is 'builtins.str*' + + from django.contrib.auth.models import PermissionsMixin + reveal_type(PermissionsMixin().is_superuser) # N: Revealed type is 'builtins.bool*' + + from django.contrib.auth.models import Group + reveal_type(Group().name) # N: Revealed type is 'builtins.str*'