mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-22 11:51:29 +08:00
Adds better id and pk handling (#791)
This commit is contained in:
66
tests/typecheck/models/test_primary_key.yml
Normal file
66
tests/typecheck/models/test_primary_key.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
- case: test_access_to_id_field_through_self_if_no_primary_key_defined
|
||||
main: |
|
||||
from myapp.models import MyModel
|
||||
x = MyModel.objects.get(id=1)
|
||||
reveal_type(x.id) # N: Revealed type is "builtins.int*"
|
||||
reveal_type(x.pk) # N: Revealed type is "builtins.int*"
|
||||
|
||||
MyModel.objects.get(pk=1)
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class MyModel(models.Model):
|
||||
def __str__(self):
|
||||
reveal_type(self.id) # N: Revealed type is "builtins.int*"
|
||||
reveal_type(self.pk) # N: Revealed type is "builtins.int*"
|
||||
|
||||
|
||||
- case: test_access_to_id_field_through_self_if_primary_key_is_defined
|
||||
main: |
|
||||
from myapp.models import MyModel
|
||||
x = MyModel.objects.get(id='a')
|
||||
reveal_type(x.id) # N: Revealed type is "builtins.str*"
|
||||
reveal_type(x.pk) # N: Revealed type is "builtins.str*"
|
||||
|
||||
MyModel.objects.get(pk='a')
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class MyModel(models.Model):
|
||||
id = models.CharField(max_length=10, primary_key=True)
|
||||
def __str__(self):
|
||||
reveal_type(self.id) # N: Revealed type is "builtins.str*"
|
||||
reveal_type(self.pk) # N: Revealed type is "builtins.str*"
|
||||
|
||||
|
||||
- case: test_access_to_id_field_through_self_if_primary_key_has_different_name
|
||||
main: |
|
||||
from myapp.models import MyModel
|
||||
x = MyModel.objects.get(primary='a')
|
||||
reveal_type(x.primary) # N: Revealed type is "builtins.str*"
|
||||
reveal_type(x.pk) # N: Revealed type is "builtins.str*"
|
||||
x.id # E: "MyModel" has no attribute "id"
|
||||
|
||||
MyModel.objects.get(pk='a')
|
||||
MyModel.objects.get(id='a') # E: Cannot resolve keyword 'id' into field. Choices are: primary
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class MyModel(models.Model):
|
||||
primary = models.CharField(max_length=10, primary_key=True)
|
||||
def __str__(self):
|
||||
reveal_type(self.primary) # N: Revealed type is "builtins.str*"
|
||||
reveal_type(self.pk) # N: Revealed type is "builtins.str*"
|
||||
self.id # E: "MyModel" has no attribute "id"
|
||||
Reference in New Issue
Block a user