Могу ли я указать стратегию присоединения прямо в модели django?

Есть ли способ указать стратегию присоединения не в запросе (с помощью prefetch_related или select_related), а прямо в модели django (как lazy='joined' в sqlalchemy)?

Вы можете определить менеджера для автоматического применения select_related и/или prefetch_related. Например:

from django.conf import settings
from django.db import models

class ProfileManager(models.Manager):
    
    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).select_related(
            'user'
        )

class Profile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_deleted=models.CASCADE
    )
    
    objects = ProfileManager()

Если вы затем обратитесь к Profile.objects.all(), то он автоматически выполнит .select_related().

Вернуться на верх