X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c15b511c1e9ebb06050f40e98ec554ba6c26cb1b..6a41571eecb01fc448e4d5d6a9d3059523988f18:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 61d20fdc6..a703c2a1e 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -1,4 +1,3 @@ -# -*- 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. # @@ -10,10 +9,9 @@ import re import urllib from django.conf import settings from django.db import connection, models, transaction -from django.db.models import permalink import django.dispatch from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _, get_language from django.utils.deconstruct import deconstructible import jsonfield @@ -30,7 +28,7 @@ from catalogue.utils import create_zip, gallery_url, gallery_path, split_tags, g from catalogue.models.tag import prefetched_relations from catalogue import app_settings from catalogue import tasks -from wolnelektury.utils import makedirs +from wolnelektury.utils import makedirs, cached_render, clear_cached_renders bofh_storage = BofhFileSystemStorage() @@ -103,7 +101,7 @@ class Book(models.Model): ebook_formats = constants.EBOOK_FORMATS formats = ebook_formats + ['html', 'xml'] - parent = models.ForeignKey('self', blank=True, null=True, related_name='children') + parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='children') ancestor = models.ManyToManyField('self', blank=True, editable=False, related_name='descendant', symmetrical=False) cached_author = models.CharField(blank=True, max_length=240, db_index=True) @@ -207,9 +205,8 @@ class Book(models.Model): return ret - @permalink def get_absolute_url(self): - return 'book_detail', [self.slug] + return reverse('book_detail', args=[self.slug]) def gallery_path(self): return gallery_path(self.slug) @@ -596,6 +593,8 @@ class Book(models.Model): parent = parent.parent def flush_includes(self, languages=True): + clear_cached_renders(self.mini_box) + clear_cached_renders(self.mini_box_nolink) if not languages: return if languages is True: @@ -603,8 +602,6 @@ class Book(models.Model): flush_ssi_includes([ template % (self.pk, lang) for template in [ - '/katalog/b/%d/mini.%s.html', - '/katalog/b/%d/mini_nolink.%s.html', '/katalog/b/%d/short.%s.html', '/katalog/b/%d/wide.%s.html', '/api/include/book/%d.%s.json', @@ -806,6 +803,18 @@ class Book(models.Model): def cover_color(self): return WLCover.epoch_colors.get(self.extra_info.get('epoch'), '#000000') + @cached_render('catalogue/book_mini_box.html') + def mini_box(self): + return { + 'book': self + } + + @cached_render('catalogue/book_mini_box.html') + def mini_box_nolink(self): + return { + 'book': self, + 'no_link': True, + } def add_file_fields(): for format_ in Book.formats: @@ -829,5 +838,5 @@ add_file_fields() class BookPopularity(models.Model): - book = models.OneToOneField(Book, related_name='popularity') + book = models.OneToOneField(Book, models.CASCADE, related_name='popularity') count = models.IntegerField(default=0, db_index=True)