X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/ac6111b68183ba7da48252eb0f7389b24ede20a9..dfd584e3b136d770bf56569030d10712a8722569:/apps/social/templatetags/social_tags.py?ds=sidebyside diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py index 889160200..bb1b4bca0 100755 --- a/apps/social/templatetags/social_tags.py +++ b/apps/social/templatetags/social_tags.py @@ -2,6 +2,8 @@ # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from random import randint +from django.db.models import Q from django import template from catalogue.models import Book from social.models import Cite @@ -20,16 +22,23 @@ def choose_cite(context, ctx=None): assert request.user.is_staff assert 'choose_cite' in request.GET cite = Cite.objects.get(pk=request.GET['choose_cite']) - except AssertionError, Cite.DoesNotExist: + except (AssertionError, Cite.DoesNotExist): if ctx is None: cites = Cite.objects.all() elif isinstance(ctx, Book): - cites = ctx.cite_set.all() - if not cites.exists(): - cites = cites_for_tags([ctx.book_tag()]) + cites = Cite.objects.filter(Q(book=ctx) | Q(book__ancestor=ctx)) else: cites = cites_for_tags(ctx) - cite = cites.order_by('-sticky', '?')[0] if cites.exists() else None + stickies = cites.filter(sticky=True) + count = stickies.count() + if count: + cite = stickies[randint(0, count - 1)] + else: + count = cites.count() + if count: + cite = cites[randint(0, count - 1)] + else: + cite = None return cite