Переопределить "только" метод набора запросов | Django - PullRequest
0 голосов
/ 27 мая 2020

Для уменьшения количества запросов, когда люди обращаются к часто запрашиваемым ссылкам внешнего ключа, я создал специальный менеджер, который всегда включает 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, как указано выше, так как это сэкономит много запросов.

...