Ticket #24513: user_model.py

File user_model.py, 4.3 KB (added by Christopher Schäpers, 10 years ago)

Model that should be migrated

Line 
1(testenv)kondou:project/ (master) $ cat project/models/user_model.py
2from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin
3from django.core import mail, validators
4from django.conf import settings
5from django.core.urlresolvers import reverse
6from django.db import models
7from django.utils import timezone, translation
8from django.utils.translation import ugettext_lazy
9import re
10
11from project.dbutilities import date_in_one_month
12
13
14class UserManager(BaseUserManager):
15 def create_user(self, username, email, password=None, to_activate=False, languagecode="en-us"):
16 pass
17
18 def create_superuser(self, username, email, password):
19 pass
20
21class User(PermissionsMixin, AbstractBaseUser):
22 class Meta:
23 get_latest_by = "date_joined"
24
25 username = models.CharField(
26 ugettext_lazy('username'), max_length=30, unique=True,
27 help_text=ugettext_lazy('30 characters or less. Letters, numbers and ./+/-/_ characters are allowed'),
28 validators=[
29 validators.RegexValidator(re.compile('^[\w.+-]+$'), ugettext_lazy('Invalid username.'), 'invalid')
30 ]
31 )
32 displayname = models.CharField(max_length=150, blank=True)
33 email = models.EmailField()
34 email_bounced = models.BooleanField(
35 default=False,
36 help_text="Whether a mail to this email bounced, and no more mail should be sent to this"
37 )
38 email_complained = models.BooleanField(
39 default=False,
40 help_text="Whether this email complained, meaning no mail, other than pwreset mails should be sent"
41 )
42 banned = models.BooleanField(default=False)
43 active = models.BooleanField(default=True)
44 date_joined = models.DateField(auto_now_add=True)
45 lastpwchange = models.DateTimeField(auto_now_add=True)
46 follows = models.ManyToManyField('self', symmetrical=False, related_name="following")
47 ignores = models.ManyToManyField(
48 'self', symmetrical=False, related_name="ignoring",
49 help_text=ugettext_lazy(
50 "Ignored means you don't get messages anymore from this user, but for them their messages seem to arrive."
51 )
52 )
53 blocks = models.ManyToManyField(
54 'self', symmetrical=False, related_name="blocking",
55 help_text=ugettext_lazy(
56 "Blocked means you don't get messages anymore from this user and they will see a \"You're blocked\" "
57 "message on trying to message you. They also can't comment on your gallerys either."
58 )
59 )
60 monetization_enabled = models.BooleanField(default=False)
61 monetization_in_queue = models.BooleanField(default=False)
62 countrycode = models.CharField(max_length=10, blank=True)
63 languagecode = models.CharField(max_length=10, blank=True)
64 payment_credit = models.FloatField(default=0)
65 avatar = models.CharField(max_length=10, unique=True, blank=True, null=True)
66 default_moderators = models.ManyToManyField('self', related_name="default_moderators")
67 uploader = models.BooleanField(default=False)
68 unread_messages = models.IntegerField(default=0)
69
70 USERNAME_FIELD = 'username'
71 REQUIRED_FIELDS = ['email']
72 objects = UserManager()
73
74 # Required methods
75
76 def get_full_name(self):
77 if self.displayname != '':
78 return self.displayname
79 else:
80 return self.username
81
82 def get_short_name(self):
83 return self.username
84
85 def is_active(self):
86 return self.active
87
88 # -- Own methods --
89
90 # Administrative
91
92 def is_banned(self):
93 return self.banned
94
95 def set_password(self, raw_password):
96 self.lastpwchange = timezone.now()
97 super().set_password(raw_password)
98
99 def set_countrycode(self, code):
100 self.countrycode = code
101 self.save()
102
103 def set_languagecode(self, code):
104 self.languagecode = code
105 self.save()
106
107 # Other
108
109 def get_url(self):
110 return reverse('userview', kwargs={'username': self.username})
111
112
113class AccountActivation(models.Model):
114 user = models.OneToOneField(User, primary_key=True)
115 token = models.CharField(
116 max_length=10, unique=True,
117 validators=[validators.RegexValidator(
118 re.compile('^[abcdefghijklmnopqrstuvwxyz\d]{10}$'), 'Invalid key', 'invalid'
119 )]
120 )
121 used = models.BooleanField(default=False)
122 expiry = models.DateField(default=date_in_one_month)
Back to Top