##// END OF EJS Templates
Removed hiding the form row with CSS as it causes problems with error rows
Removed hiding the form row with CSS as it causes problems with error rows

File last commit:

r395:f18b32bd default
r450:c3103f8c default
Show More
user.py
108 lines | 2.7 KiB | text/x-python | PythonLexer
from django.db import models
from django.db.models import Count
from boards import settings
from boards.models import Post
from django.core.cache import cache
__author__ = 'neko259'
RANK_ADMIN = 0
RANK_MODERATOR = 10
RANK_USER = 100
BAN_REASON_AUTO = 'Auto'
BAN_REASON_MAX_LENGTH = 200
class User(models.Model):
class Meta:
app_label = 'boards'
user_id = models.CharField(max_length=50)
rank = models.IntegerField()
registration_time = models.DateTimeField()
fav_tags = models.ManyToManyField('Tag', null=True, blank=True)
fav_threads = models.ManyToManyField(Post, related_name='+', null=True,
blank=True)
def save_setting(self, name, value):
setting, created = Setting.objects.get_or_create(name=name, user=self)
setting.value = str(value)
setting.save()
return setting
def get_setting(self, name):
if Setting.objects.filter(name=name, user=self).exists():
setting = Setting.objects.get(name=name, user=self)
setting_value = setting.value
else:
setting_value = None
return setting_value
def is_moderator(self):
return RANK_MODERATOR >= self.rank
def get_sorted_fav_tags(self):
cache_key = self._get_tag_cache_key()
fav_tags = cache.get(cache_key)
if fav_tags:
return fav_tags
tags = self.fav_tags.annotate(Count('threads')) \
.filter(threads__count__gt=0).order_by('name')
if tags.exists():
cache.set(cache_key, tags, settings.CACHE_TIMEOUT)
return tags
def get_post_count(self):
return Post.objects.filter(user=self).count()
def __unicode__(self):
return self.user_id + '(' + str(self.rank) + ')'
def get_last_access_time(self):
posts = Post.objects.filter(user=self)
if posts.count() > 0:
return posts.latest('pub_time').pub_time
def add_tag(self, tag):
self.fav_tags.add(tag)
cache.delete(self._get_tag_cache_key())
def remove_tag(self, tag):
self.fav_tags.remove(tag)
cache.delete(self._get_tag_cache_key())
def _get_tag_cache_key(self):
return self.user_id + '_tags'
class Setting(models.Model):
class Meta:
app_label = 'boards'
name = models.CharField(max_length=50)
value = models.CharField(max_length=50)
user = models.ForeignKey(User)
class Ban(models.Model):
class Meta:
app_label = 'boards'
ip = models.GenericIPAddressField()
reason = models.CharField(default=BAN_REASON_AUTO,
max_length=BAN_REASON_MAX_LENGTH)
can_read = models.BooleanField(default=True)
def __unicode__(self):
return self.ip