mirror of
https://github.com/davidhalter/django-stubs.git
synced 2026-02-25 19:17:17 +08:00
Create related managers from generated managers (#580)
This commit is contained in:
committed by
GitHub
parent
cd9ef6cdd4
commit
9beb5327de
@@ -652,10 +652,18 @@
|
||||
|
||||
- case: related_manager_is_a_subclass_of_default_manager
|
||||
main: |
|
||||
from myapp.models import User
|
||||
reveal_type(User().orders) # N: Revealed type is 'myapp.models.Order_RelatedManager'
|
||||
from myapp.models import User, Order, Product
|
||||
reveal_type(User().orders) # N: Revealed type is 'myapp.models.User_Order_RelatedManager1'
|
||||
reveal_type(User().orders.get()) # N: Revealed type is 'myapp.models.Order*'
|
||||
reveal_type(User().orders.manager_method()) # N: Revealed type is 'builtins.int'
|
||||
reveal_type(Order().products) # N: Revealed type is 'myapp.models.Order_Product_RelatedManager1'
|
||||
reveal_type(Order().products.get()) # N: Revealed type is 'myapp.models.Product*'
|
||||
reveal_type(Order().products.queryset_method()) # N: Revealed type is 'builtins.int'
|
||||
# TODO: realted manager support to use the same type for all related managers
|
||||
if 1 == 2:
|
||||
manager = User().products
|
||||
else:
|
||||
manager = Order().products # E: Incompatible types in assignment (expression has type "Order_Product_RelatedManager1", variable has type "User_Product_RelatedManager1")
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
@@ -671,6 +679,46 @@
|
||||
class Order(models.Model):
|
||||
objects = OrderManager()
|
||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='orders')
|
||||
class ProductQueryset(models.QuerySet):
|
||||
def queryset_method(self) -> int:
|
||||
pass
|
||||
ProductManager = models.Manager.from_queryset(ProductQueryset)
|
||||
class Product(models.Model):
|
||||
objects = ProductManager()
|
||||
order = models.ForeignKey(to=Order, on_delete=models.CASCADE, related_name='products')
|
||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='products')
|
||||
|
||||
- case: related_manager_no_conflict_from_star_import
|
||||
main: |
|
||||
import myapp.models
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models/__init__.py
|
||||
content: |
|
||||
from myapp.models.a import *
|
||||
# make sure generated related manager from address to user doesn't have
|
||||
# the same name with related manager from profile to user
|
||||
from myapp.models.b import *
|
||||
- path: myapp/models/a.py
|
||||
content: |
|
||||
from django.db import models
|
||||
class Address(models.Model):
|
||||
pass
|
||||
- path: myapp/models/b.py
|
||||
content: |
|
||||
from django.db import models
|
||||
from .a import Address
|
||||
class Profile(models.Model):
|
||||
pass
|
||||
class UserQuerySet(models.QuerySet):
|
||||
pass
|
||||
UserManager = models.Manager.from_queryset(UserQuerySet)
|
||||
class User(models.Model):
|
||||
address = models.ForeignKey(Address, on_delete=models.CASCADE)
|
||||
profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
|
||||
objects = UserManager()
|
||||
|
||||
- case: many_to_many_field_can_be_used_in_alias
|
||||
main: |
|
||||
|
||||
Reference in New Issue
Block a user