Для уменьшения количества запросов, когда люди обращаются к часто запрашиваемым ссылкам внешнего ключа, я создал специальный менеджер, который всегда включает select_related
для отношения внешнего ключа. Теперь, когда в коде есть места, где люди использовали only
в этой же модели при создании набора запросов. Как я могу переопределить метод набора запросов only
, чтобы всегда включать это отношение внешнего ключа.
class CustomManager(models.Manager):
def get_queryset(self):
return super(CustomManager, self).get_queryset().select_related('user')
Когда эта модель используется, как показано ниже, я сталкиваюсь с ошибкой, которая говорит: Field cannot be both deferred and traversed using select_related at the same time.
Model.objects.only('id','field_1').get(pk=1)
В любом случае, чтобы смягчить это? Я использую select_related
, как указано выше, так как это сэкономит много запросов.