-# -*- coding: utf-8 -*-
# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
from django.db import models, transaction
import catalogue.models
-from django.db.models import permalink
from sorl.thumbnail import ImageField
from django.conf import settings
from django.contrib.contenttypes.fields import GenericRelation
from django.core.files.storage import FileSystemStorage
+from django.urls import reverse
from slugify import slugify
from ssify import flush_ssi_includes
from catalogue.models.tag import prefetched_relations
from catalogue.utils import split_tags
from picture import tasks
+from wolnelektury.utils import cached_render, clear_cached_renders
from io import BytesIO
import jsonfield
import itertools
class PictureArea(models.Model):
- picture = models.ForeignKey('picture.Picture', related_name='areas')
+ picture = models.ForeignKey('picture.Picture', models.CASCADE, related_name='areas')
area = jsonfield.JSONField(_('area'), default={}, editable=False)
kind = models.CharField(
_('kind'), max_length=10, blank=False, null=False, db_index=True,
def tags_by_category(self):
return split_tags(self.tags)
- @permalink
def get_absolute_url(self):
- return 'picture_detail', [self.slug]
+ return reverse('picture_detail', args=[self.slug])
def get_initial(self):
try:
names = [tag[0] for tag in names]
return ', '.join(names)
+ @cached_render('picture/picture_mini_box.html')
+ def mini_box(self):
+ return {
+ 'picture': self,
+ }
+
def related_themes(self):
return catalogue.models.Tag.objects.usage_for_queryset(
self.areas.all(), counts=True).filter(category__in=('theme', 'thing'))
def flush_includes(self, languages=True):
+ clear_cached_renders(self.mini_box)
if not languages:
return
if languages is True: