X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/af5d82d4f0314cc9c9daa158b9398ee8688b8594..c4b4a64757ba65018dc24334cb44a12ad2a4316a:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 2008f0970..90ecb1a3c 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -55,7 +55,7 @@ class Tag(TagBase): death = models.IntegerField(_(u'year of death'), blank=True, null=True) gazeta_link = models.CharField(blank=True, max_length=240) wiki_link = models.CharField(blank=True, max_length=240) - + categories_rev = { 'autor': 'author', 'epoka': 'epoch', @@ -117,7 +117,7 @@ class Tag(TagBase): real_tags.append(Tag.objects.exclude(category='book').get(slug=name)) except Tag.MultipleObjectsReturned, e: ambiguous_slugs.append(name) - + if category: # something strange left off raise Tag.DoesNotExist() @@ -131,13 +131,13 @@ class Tag(TagBase): return real_tags else: return TagBase.get_tag_list(tags) - + @property def url_chunk(self): return '/'.join((Tag.categories_dict[self.category], self.slug)) -# TODO: why is this hard-coded ? +# TODO: why is this hard-coded ? def book_upload_path(ext): def get_dynamic_path(book, filename): return 'lektura/%s.%s' % (book.slug, ext) @@ -171,7 +171,7 @@ class Book(models.Model): objects = models.Manager() tagged = managers.ModelTaggedItemManager(Tag) tags = managers.TagDescriptor(Tag) - + _tag_counter = JSONField(null=True, editable=False) _theme_counter = JSONField(null=True, editable=False) @@ -189,8 +189,12 @@ class Book(models.Model): def save(self, force_insert=False, force_update=False, reset_short_html=True, refresh_mp3=True): if reset_short_html: # Reset _short_html during save + update = {} for key in filter(lambda x: x.startswith('_short_html'), self.__dict__): + update[key] = '' self.__setattr__(key, '') + # Fragment.short_html relies on book's tags, so reset it here too + self.fragments.all().update(**update) book = super(Book, self).save(force_insert, force_update) @@ -210,7 +214,7 @@ class Book(models.Model): @property def name(self): return self.title - + def book_tag(self): slug = ('l-' + self.slug)[:120] book_tag, created = Tag.objects.get_or_create(slug=slug, category='book') @@ -323,18 +327,23 @@ class Book(models.Model): book.save() book_tags = [] - for category in ('kind', 'genre', 'author', 'epoch'): - tag_name = getattr(book_info, category) - tag_sort_key = tag_name - if category == 'author': - tag_sort_key = tag_name.last_name - tag_name = ' '.join(tag_name.first_names) + ' ' + tag_name.last_name - tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) - if created: - tag.name = tag_name - tag.sort_key = slughifi(tag_sort_key) - tag.save() - book_tags.append(tag) + categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch')) + for field_name, category in categories: + try: + tag_names = getattr(book_info, field_name) + except: + tag_names = [getattr(book_info, category)] + for tag_name in tag_names: + tag_sort_key = tag_name + if category == 'author': + tag_sort_key = tag_name.last_name + tag_name = ' '.join(tag_name.first_names) + ' ' + tag_name.last_name + tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) + if created: + tag.name = tag_name + tag.sort_key = slughifi(tag_sort_key) + tag.save() + book_tags.append(tag) book.tags = book_tags @@ -399,8 +408,8 @@ class Book(models.Model): book.save() return book - - + + def refresh_tag_counter(self): tags = {} for child in self.children.all().order_by(): @@ -411,7 +420,7 @@ class Book(models.Model): self.set__tag_counter_value(tags) self.save(reset_short_html=False, refresh_mp3=False) return tags - + @property def tag_counter(self): if self._tag_counter is None: @@ -426,13 +435,13 @@ class Book(models.Model): self.set__theme_counter_value(tags) self.save(reset_short_html=False, refresh_mp3=False) return tags - + @property def theme_counter(self): if self._theme_counter is None: return self.refresh_theme_counter() return dict((int(k), v) for k, v in self.get__theme_counter_value().iteritems()) - + class Fragment(models.Model): @@ -460,11 +469,8 @@ class Fragment(models.Model): if short_html and len(short_html): return mark_safe(short_html) else: - book_authors = [mark_safe(u'%s' % (tag.get_absolute_url(), tag.name)) - for tag in self.book.tags if tag.category == 'author'] - setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html', - {'fragment': self, 'book': self.book, 'book_authors': book_authors}))) + {'fragment': self}))) self.save() return mark_safe(getattr(self, key))