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',
def get_tag_list(tags):
if isinstance(tags, basestring):
real_tags = []
+ ambiguous_slugs = []
category = None
- for name in tags.split('/'):
+ tags_splitted = tags.split('/')
+ for index, name in enumerate(tags_splitted):
if name in Tag.categories_rev:
category = Tag.categories_rev[name]
else:
real_tags.append(Tag.objects.get(slug=name, category=category))
category = None
else:
- real_tags.append(Tag.objects.get(slug=name))
+ try:
+ real_tags.append(Tag.objects.exclude(category='book').get(slug=name))
+ except Tag.MultipleObjectsReturned, e:
+ ambiguous_slugs.append(name)
+
if category:
- raise Http404
- return real_tags
+ # something strange left off
+ raise Tag.DoesNotExist()
+ if ambiguous_slugs:
+ # some tags should be qualified
+ e = Tag.MultipleObjectsReturned()
+ e.tags = real_tags
+ e.ambiguous_slugs = ambiguous_slugs
+ raise e
+ else:
+ 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)
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)
@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')
book.save()
return book
-
-
+
+
def refresh_tag_counter(self):
tags = {}
for child in self.children.all().order_by():
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:
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):