mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-06 20:24:31 +08:00
Add support for BaseManager.from_queryset() (#251)
* add support for BaseManager.from_queryset() * cleanups * lint fixes
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
- case: test_from_queryset_returns_intersection_of_manager_and_queryset
|
||||
main: |
|
||||
from myapp.models import MyModel, NewManager
|
||||
reveal_type(NewManager()) # N: Revealed type is 'myapp.models.NewManager'
|
||||
reveal_type(MyModel.objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
|
||||
reveal_type(MyModel.objects.get()) # N: Revealed type is 'Any'
|
||||
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is 'builtins.int'
|
||||
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is 'builtins.str'
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class ModelBaseManager(models.Manager):
|
||||
def manager_only_method(self) -> int:
|
||||
return 1
|
||||
class ModelQuerySet(models.QuerySet):
|
||||
def manager_and_queryset_method(self) -> str:
|
||||
return 'hello'
|
||||
|
||||
NewManager = ModelBaseManager.from_queryset(ModelQuerySet)
|
||||
class MyModel(models.Model):
|
||||
objects = NewManager()
|
||||
|
||||
- case: test_from_queryset_with_class_name_provided
|
||||
main: |
|
||||
from myapp.models import MyModel, NewManager
|
||||
reveal_type(NewManager()) # N: Revealed type is 'myapp.models.NewManager'
|
||||
reveal_type(MyModel.objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
|
||||
reveal_type(MyModel.objects.get()) # N: Revealed type is 'Any'
|
||||
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is 'builtins.int'
|
||||
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is 'builtins.str'
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class ModelBaseManager(models.Manager):
|
||||
def manager_only_method(self) -> int:
|
||||
return 1
|
||||
class ModelQuerySet(models.QuerySet):
|
||||
def manager_and_queryset_method(self) -> str:
|
||||
return 'hello'
|
||||
|
||||
NewManager = ModelBaseManager.from_queryset(ModelQuerySet, class_name='NewManager')
|
||||
class MyModel(models.Model):
|
||||
objects = NewManager()
|
||||
|
||||
Reference in New Issue
Block a user