X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/60c3eb6ecbe5c000aa4d24344e85d2ed00d8983c..51369735b0c2f71ee63c1403da3254d5efed2b93:/src/catalogue/models/tag.py diff --git a/src/catalogue/models/tag.py b/src/catalogue/models/tag.py index 00bdcb55b..828a8b191 100644 --- a/src/catalogue/models/tag.py +++ b/src/catalogue/models/tag.py @@ -3,8 +3,11 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.conf import settings +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType from django.core.cache import caches from django.contrib.auth.models import User +from django.core.exceptions import ObjectDoesNotExist from django.db import models from django.db.models import permalink from django.db.models.query import Prefetch @@ -27,6 +30,24 @@ TAG_CATEGORIES = ( ) +class TagRelation(models.Model): + + tag = models.ForeignKey('Tag', verbose_name=_('tag'), related_name='items') + content_type = models.ForeignKey(ContentType, verbose_name=_('content type')) + object_id = models.PositiveIntegerField(_('object id'), db_index=True) + content_object = GenericForeignKey('content_type', 'object_id') + + class Meta: + db_table = 'catalogue_tag_relation' + unique_together = (('tag', 'content_type', 'object_id'),) + + def __unicode__(self): + try: + return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag) + except ObjectDoesNotExist: + return u' [%s]' % self.tag + + class Tag(TagBase): """A tag attachable to books and fragments (and possibly anything). @@ -49,6 +70,8 @@ class Tag(TagBase): after_change = Signal(providing_args=['instance', 'languages']) + intermediary_table_model = TagRelation + class UrlDeprecationWarning(DeprecationWarning): def __init__(self, tags=None): super(Tag.UrlDeprecationWarning, self).__init__() @@ -245,10 +268,6 @@ class Tag(TagBase): return meta_tags -# 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: