Skip to content

Commit e7da6a9

Browse files
Also typecheck aget calls (#2856)
1 parent dd8d93f commit e7da6a9

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

mypy_django_plugin/main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ def manager_and_queryset_method_hooks(self) -> dict[str, Callable[[MethodContext
163163
"acreate": partial(init_create.typecheck_model_acreate, django_context=self.django_context),
164164
"filter": typecheck_filtering_method,
165165
"get": typecheck_filtering_method,
166+
"aget": typecheck_filtering_method,
166167
"exclude": typecheck_filtering_method,
167168
"prefetch_related": partial(
168169
querysets.extract_prefetch_related_annotations, django_context=self.django_context

tests/typecheck/managers/querysets/test_filter.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,3 +349,34 @@
349349
class MyModel(models.Model):
350350
age = models.IntegerField()
351351
objects = MyQuerySet.as_manager()
352+
353+
- case: async_filtering_with_aget
354+
main: |
355+
from myapp.models import User
356+
357+
async def test_async_get() -> None:
358+
# Valid aget calls
359+
user = await User.objects.aget(username='maksim')
360+
user2 = await User.objects.aget(age=25)
361+
user3 = await User.objects.aget(username__contains='hello')
362+
user4 = await User.objects.aget(age__gt=1)
363+
364+
# Invalid field
365+
await User.objects.aget(unknown_field=True) # E: Cannot resolve keyword 'unknown_field' into field. Choices are: age, id, username [misc]
366+
367+
# Invalid type
368+
await User.objects.aget(age=User()) # E: Incompatible type for lookup 'age': (got "User", expected "str | int") [misc]
369+
370+
# Invalid lookup type
371+
await User.objects.aget(username__contains=1) # E: Incompatible type for lookup 'username__contains': (got "int", expected "str") [misc]
372+
installed_apps:
373+
- myapp
374+
files:
375+
- path: myapp/__init__.py
376+
- path: myapp/models.py
377+
content: |
378+
from django.db import models
379+
380+
class User(models.Model):
381+
username = models.CharField(max_length=100)
382+
age = models.IntegerField()

0 commit comments

Comments
 (0)