|
428 | 428 | - myapp |
429 | 429 | main: | |
430 | 430 | from django.contrib.contenttypes.prefetch import GenericPrefetch |
431 | | - from myapp.models import Bookmark, Animal, TaggedItem |
| 431 | + from myapp.models import Bookmark, Animal, TaggedItem, Dog, Cat |
432 | 432 | from typing_extensions import reveal_type |
433 | 433 |
|
434 | 434 | # Basic GenericPrefetch usage |
|
437 | 437 | ) |
438 | 438 | reveal_type(prefetch) # N: Revealed type is "django.contrib.contenttypes.prefetch.GenericPrefetch[Literal['content_object'], list[django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model]], str]" |
439 | 439 |
|
| 440 | + # GenericPrefetch usage with custom querysets |
| 441 | + prefetch_custom = GenericPrefetch( |
| 442 | + "content_object", [Dog.objects.all(), Cat.objects.all()] |
| 443 | + ) |
| 444 | + reveal_type(prefetch_custom) # N: Revealed type is "django.contrib.contenttypes.prefetch.GenericPrefetch[Literal['content_object'], list[myapp.models.CustomQuerySet[django.db.models.base.Model, django.db.models.base.Model]], str]" |
| 445 | +
|
| 446 | + prefetch_custom_mixed = GenericPrefetch( |
| 447 | + "content_object", [Bookmark.objects.all(), Animal.objects.only("name"), Dog.objects.all(), Cat.objects.all()] |
| 448 | + ) |
| 449 | + reveal_type(prefetch_custom_mixed) # N: Revealed type is "django.contrib.contenttypes.prefetch.GenericPrefetch[Literal['content_object'], list[django.db.models.query.QuerySet[django.db.models.base.Model, django.db.models.base.Model]], str]" |
| 450 | +
|
440 | 451 | # Using GenericPrefetch with prefetch_related |
441 | 452 | qs = TaggedItem.objects.prefetch_related(prefetch).all() |
442 | 453 | reveal_type(qs) # N: Revealed type is "django.db.models.query.QuerySet[myapp.models.TaggedItem, myapp.models.TaggedItem]" |
|
477 | 488 | class Animal(models.Model): |
478 | 489 | name = models.CharField(max_length=100) |
479 | 490 |
|
| 491 | + class CustomQuerySet(models.QuerySet): |
| 492 | + pass |
| 493 | +
|
| 494 | + CustomManager = models.Manager.from_queryset(CustomQuerySet) |
| 495 | +
|
| 496 | + class Dog(models.Model): |
| 497 | + objects = CustomManager() |
| 498 | +
|
| 499 | + class Cat(models.Model): |
| 500 | + objects = CustomManager() |
| 501 | +
|
480 | 502 | class TaggedItem(models.Model): |
481 | 503 | tag = models.CharField(max_length=100) |
482 | 504 | content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) |
|
0 commit comments