Django: определить, какие модели использовались в запросе

#python #django #django-orm #python-decorators

#python #django #django-orm #python-декораторы

Вопрос:

TL; DR: нужно знать, какие модели использовались в запросах, выполняемых в некотором блоке кода

У меня есть самодельная система кэширования, которая имеет возможность автоматически удалять кеш при сохранении определенных моделей.

Использование (пример в наборе представлений API Django Rest framework):

 class UsersViewSet(ListModelMixin)
    model = User
    queryset = User.objects

    # Here cache decorator goes
    @cache_view(models_to_drop_cache=[User, UserProfile, UserPhone])
    def list(self, request, *args, **kwargs):
        # calling the real viewset method
        return super().list(request, *args, **kwargs)
 

Теперь, когда какая-либо из моделей [User, UserProfile, UserPhone] изменяется, кэш в этом представлении будет удален (это достигается с помощью приемника сигнала сохранения сигнала модели).

Проблема в том, что иногда не все модели записывались в список (кто-то забыл), и кэш не удалялся, когда это было необходимо.

Я хочу добавить некоторый debug аргумент в метод cache_view, чтобы в режиме отладки декоратор собирал информацию о моделях, которые использовались в декорированном методе, и выводил список.

Я пытался искать сигналы модели, но безуспешно. Похоже, мне нужно использовать конструктор запросов Django для проверки имен таблиц в результирующем коде SQL, который был выполнен.

Может быть, есть более простой метод?