##// END OF EJS Templates
Updates to the user model
neko259 -
r624:e21a263d default
parent child Browse files
Show More
@@ -1,108 +1,112 b''
1 from django.db import models
1 from django.db import models
2 from django.db.models import Count
2 from django.db.models import Count
3 from boards import settings
3 from boards import settings
4 from boards.models import Post
4 from boards.models import Post
5 from django.core.cache import cache
5 from django.core.cache import cache
6
6
7 __author__ = 'neko259'
7 __author__ = 'neko259'
8
8
9 RANK_ADMIN = 0
9 RANK_ADMIN = 0
10 RANK_MODERATOR = 10
10 RANK_MODERATOR = 10
11 RANK_USER = 100
11 RANK_USER = 100
12
12
13 BAN_REASON_AUTO = 'Auto'
13 BAN_REASON_AUTO = 'Auto'
14 BAN_REASON_MAX_LENGTH = 200
14 BAN_REASON_MAX_LENGTH = 200
15
15
16
16
17 class User(models.Model):
17 class User(models.Model):
18
18
19 class Meta:
19 class Meta:
20 app_label = 'boards'
20 app_label = 'boards'
21
21
22 user_id = models.CharField(max_length=50)
22 user_id = models.CharField(max_length=50)
23 rank = models.IntegerField()
23 rank = models.IntegerField()
24
24
25 registration_time = models.DateTimeField()
25 registration_time = models.DateTimeField()
26
26
27 fav_tags = models.ManyToManyField('Tag', null=True, blank=True)
27 fav_tags = models.ManyToManyField('Tag', null=True, blank=True)
28 fav_threads = models.ManyToManyField(Post, related_name='+', null=True,
28 fav_threads = models.ManyToManyField(Post, related_name='+', null=True,
29 blank=True)
29 blank=True)
30
30
31 def save_setting(self, name, value):
31 def save_setting(self, name, value):
32 setting, created = Setting.objects.get_or_create(name=name, user=self)
32 setting, created = Setting.objects.get_or_create(name=name, user=self)
33 setting.value = str(value)
33 setting.value = str(value)
34 setting.save()
34 setting.save()
35
35
36 return setting
36 return setting
37
37
38 def get_setting(self, name):
38 def get_setting(self, name):
39 if Setting.objects.filter(name=name, user=self).exists():
39 if Setting.objects.filter(name=name, user=self).exists():
40 setting = Setting.objects.get(name=name, user=self)
40 setting = Setting.objects.get(name=name, user=self)
41 setting_value = setting.value
41 setting_value = setting.value
42 else:
42 else:
43 setting_value = None
43 setting_value = None
44
44
45 return setting_value
45 return setting_value
46
46
47 def is_moderator(self):
47 def is_moderator(self):
48 return RANK_MODERATOR >= self.rank
48 return RANK_MODERATOR >= self.rank
49
49
50 def get_sorted_fav_tags(self):
50 def get_sorted_fav_tags(self):
51 cache_key = self._get_tag_cache_key()
51 cache_key = self._get_tag_cache_key()
52 fav_tags = cache.get(cache_key)
52 fav_tags = cache.get(cache_key)
53 if fav_tags:
53 if fav_tags:
54 return fav_tags
54 return fav_tags
55
55
56 tags = self.fav_tags.annotate(Count('threads')) \
56 tags = self.fav_tags.annotate(Count('threads')) \
57 .filter(threads__count__gt=0).order_by('name')
57 .filter(threads__count__gt=0).order_by('name')
58
58
59 if tags.exists():
59 if tags:
60 cache.set(cache_key, tags, settings.CACHE_TIMEOUT)
60 cache.set(cache_key, tags)
61
61
62 return tags
62 return tags
63
63
64 def get_post_count(self):
64 def get_post_count(self):
65 return Post.objects.filter(user=self).count()
65 return Post.objects.filter(user=self).count()
66
66
67 def __unicode__(self):
67 def __unicode__(self):
68 return self.user_id + '(' + str(self.rank) + ')'
68 return self.user_id + '(' + str(self.rank) + ')'
69
69
70 def get_last_access_time(self):
70 def get_last_access_time(self):
71 """
72 Gets user's last post time.
73 """
74
71 posts = Post.objects.filter(user=self)
75 posts = Post.objects.filter(user=self)
72 if posts.count() > 0:
76 if posts.exists() > 0:
73 return posts.latest('pub_time').pub_time
77 return posts.latest('pub_time').pub_time
74
78
75 def add_tag(self, tag):
79 def add_tag(self, tag):
76 self.fav_tags.add(tag)
80 self.fav_tags.add(tag)
77 cache.delete(self._get_tag_cache_key())
81 cache.delete(self._get_tag_cache_key())
78
82
79 def remove_tag(self, tag):
83 def remove_tag(self, tag):
80 self.fav_tags.remove(tag)
84 self.fav_tags.remove(tag)
81 cache.delete(self._get_tag_cache_key())
85 cache.delete(self._get_tag_cache_key())
82
86
83 def _get_tag_cache_key(self):
87 def _get_tag_cache_key(self):
84 return self.user_id + '_tags'
88 return self.user_id + '_tags'
85
89
86
90
87 class Setting(models.Model):
91 class Setting(models.Model):
88
92
89 class Meta:
93 class Meta:
90 app_label = 'boards'
94 app_label = 'boards'
91
95
92 name = models.CharField(max_length=50)
96 name = models.CharField(max_length=50)
93 value = models.CharField(max_length=50)
97 value = models.CharField(max_length=50)
94 user = models.ForeignKey(User)
98 user = models.ForeignKey(User)
95
99
96
100
97 class Ban(models.Model):
101 class Ban(models.Model):
98
102
99 class Meta:
103 class Meta:
100 app_label = 'boards'
104 app_label = 'boards'
101
105
102 ip = models.GenericIPAddressField()
106 ip = models.GenericIPAddressField()
103 reason = models.CharField(default=BAN_REASON_AUTO,
107 reason = models.CharField(default=BAN_REASON_AUTO,
104 max_length=BAN_REASON_MAX_LENGTH)
108 max_length=BAN_REASON_MAX_LENGTH)
105 can_read = models.BooleanField(default=True)
109 can_read = models.BooleanField(default=True)
106
110
107 def __unicode__(self):
111 def __unicode__(self):
108 return self.ip
112 return self.ip
General Comments 0
You need to be logged in to leave comments. Login now