update_badges.py
1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand, CommandError
from haystack.query import SearchQuerySet
from accounts.models import User
from badger.models import Badge
class Command(BaseCommand):
help = "Update the user's badges"
def handle(self, *args, **kwargs):
for badge in Badge.objects.filter(type='auto'):
if not badge.comparison:
continue
elif badge.comparison == 'biggest':
order = u'-{}'.format(Badge.USER_ATTR_OPTS[badge.user_attr])
sqs = SearchQuerySet().filter(type='user')
user = sqs.order_by(order)[0]
badge.awardees.add(User.objects.get(pk=user.pk))
continue
comparison = u'__{}'.format(badge.comparison) if badge.comparison \
is not 'equal' else u''
key = u'{}{}'.format(
Badge.USER_ATTR_OPTS[badge.user_attr],
comparison
)
opts = {key: badge.value}
sqs = SearchQuerySet().filter(
type='user',
**opts
)
for user in sqs:
badge.awardees.add(User.objects.get(pk=user.pk))