X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/b2b4f8f39a4b15cbc3b9af7c06f75bbed9a84c88..0a6491f331f86bec9fe22ad6b0361b496fefb009:/src/catalogue/models/tag.py diff --git a/src/catalogue/models/tag.py b/src/catalogue/models/tag.py index 153197307..00bdcb55b 100644 --- a/src/catalogue/models/tag.py +++ b/src/catalogue/models/tag.py @@ -7,6 +7,7 @@ from django.core.cache import caches from django.contrib.auth.models import User from django.db import models from django.db.models import permalink +from django.db.models.query import Prefetch from django.dispatch import Signal from django.utils.translation import ugettext_lazy as _ @@ -246,3 +247,18 @@ class Tag(TagBase): # Pickle complains about not having this. TagRelation = Tag.intermediary_table_model + + +def prefetch_relations(objects, category, only_name=True): + queryset = TagRelation.objects.filter(tag__category=category).select_related('tag') + if only_name: + queryset = queryset.only('tag__name_pl', 'object_id') + return objects.prefetch_related( + Prefetch('tag_relations', queryset=queryset, to_attr='%s_relations' % category)) + + +def prefetched_relations(obj, category): + if hasattr(obj, '%s_relations' % category): + return getattr(obj, '%s_relations' % category) + else: + return None