mirror of
https://github.com/davidhalter/django-stubs.git
synced 2026-05-19 23:09:56 +08:00
Emit error and set fallback type for managers that can't be resolved (#999)
* Emit error and set fallback type for managers that can't be resolved * fixup! Emit error and set fallback type for managers that can't be resolved
This commit is contained in:
@@ -442,3 +442,82 @@
|
||||
class MyModel(models.Model):
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
on_site = CurrentSiteManager()
|
||||
|
||||
- case: test_emits_error_for_unresolved_managers
|
||||
main: |
|
||||
from myapp import models
|
||||
installed_apps:
|
||||
- myapp
|
||||
files:
|
||||
- path: myapp/__init__.py
|
||||
- path: myapp/models.py
|
||||
content: |
|
||||
from django.db import models
|
||||
|
||||
def LocalManager() -> models.Manager:
|
||||
"""
|
||||
Returns a manager instance of an inlined manager type that can't
|
||||
be resolved.
|
||||
"""
|
||||
class InnerManager(models.Manager):
|
||||
...
|
||||
|
||||
return InnerManager()
|
||||
|
||||
class User(models.Model):
|
||||
name = models.TextField()
|
||||
|
||||
class Booking(models.Model):
|
||||
renter = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||
owner = models.ForeignKey(User, on_delete=models.PROTECT, related_name='bookingowner_set')
|
||||
|
||||
objects = LocalManager()
|
||||
|
||||
class TwoUnresolvable(models.Model):
|
||||
objects = LocalManager()
|
||||
second_objects = LocalManager()
|
||||
|
||||
class AbstractUnresolvable(models.Model):
|
||||
objects = LocalManager()
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
class InvisibleUnresolvable(AbstractUnresolvable):
|
||||
text = models.TextField()
|
||||
|
||||
def process_booking(user: User):
|
||||
reveal_type(User.objects)
|
||||
reveal_type(User._default_manager)
|
||||
|
||||
reveal_type(Booking.objects)
|
||||
reveal_type(Booking._default_manager)
|
||||
|
||||
reveal_type(TwoUnresolvable.objects)
|
||||
reveal_type(TwoUnresolvable.second_objects)
|
||||
reveal_type(TwoUnresolvable._default_manager)
|
||||
|
||||
reveal_type(InvisibleUnresolvable.objects)
|
||||
reveal_type(InvisibleUnresolvable._default_manager)
|
||||
|
||||
reveal_type(user.bookingowner_set)
|
||||
reveal_type(user.booking_set)
|
||||
out: |
|
||||
myapp/models:13: error: Couldn't resolve related manager for relation 'booking' (from myapp.models.Booking.myapp.Booking.renter).
|
||||
myapp/models:13: error: Couldn't resolve related manager for relation 'bookingowner_set' (from myapp.models.Booking.myapp.Booking.owner).
|
||||
myapp/models:20: error: Could not resolve manager type for "myapp.models.Booking.objects"
|
||||
myapp/models:23: error: Could not resolve manager type for "myapp.models.TwoUnresolvable.objects"
|
||||
myapp/models:24: error: Could not resolve manager type for "myapp.models.TwoUnresolvable.second_objects"
|
||||
myapp/models:27: error: Could not resolve manager type for "myapp.models.AbstractUnresolvable.objects"
|
||||
myapp/models:32: error: Could not resolve manager type for "myapp.models.InvisibleUnresolvable.objects"
|
||||
myapp/models:36: note: Revealed type is "django.db.models.manager.Manager[myapp.models.User]"
|
||||
myapp/models:37: note: Revealed type is "django.db.models.manager.Manager[myapp.models.User]"
|
||||
myapp/models:39: note: Revealed type is "django.db.models.manager.Manager[myapp.models.Booking]"
|
||||
myapp/models:40: note: Revealed type is "django.db.models.manager.BaseManager[myapp.models.Booking]"
|
||||
myapp/models:42: note: Revealed type is "django.db.models.manager.Manager[myapp.models.TwoUnresolvable]"
|
||||
myapp/models:43: note: Revealed type is "django.db.models.manager.Manager[myapp.models.TwoUnresolvable]"
|
||||
myapp/models:44: note: Revealed type is "django.db.models.manager.BaseManager[myapp.models.TwoUnresolvable]"
|
||||
myapp/models:46: note: Revealed type is "django.db.models.manager.Manager[myapp.models.InvisibleUnresolvable]"
|
||||
myapp/models:47: note: Revealed type is "django.db.models.manager.BaseManager[myapp.models.InvisibleUnresolvable]"
|
||||
myapp/models:49: note: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Booking]"
|
||||
myapp/models:50: note: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Booking]"
|
||||
|
||||
Reference in New Issue
Block a user