У меня есть модель queryset
, для которой мне нужно выполнить кэширование для отношений O2M и M2M, используя prefetch_related
.
То же самое относится и к отношениям O2O, используя select_related
соответственно.
Я хочу сделать это как универсальную реализацию, в которой я найду все related_name
значения связанных моделей и распакую их следующим образом:
def cache_related():
related_names = [...] # the related_name values for the prefetchable related models
cached_queryset = queryset.prefetch_related(*related_names)
return cached_queryset
В настоящее время я получаю доступ к этим значениям с помощью:
related_models = deepcopy(queryset.model._meta.related_objects)
related_names = [m.related_name for m in related_models]
Проблема в том, что я действительно не хочу получать доступ к защищенным _meta
значениям напрямую.
Есть ли в Django утилита, которая возвращает список всех related_name
значения отношений модели O2O, O2M и M2M?
Я нашел ссылки на django.db.models.lookups
и класс Lookup
, но, похоже, он не подходит для моего случая.