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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 | from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.db.models import permalink
from django.contrib.auth.models import User
from django.contrib.localflavor.us.models import PhoneNumberField
import datetime
from dateutil import relativedelta
import re
class Profile(models.Model):
""" Profile model """
GENDER_CHOICES = (
(1, 'Male'),
(2, 'Female'),
)
user = models.ForeignKey(User, unique=True)
gender = models.PositiveSmallIntegerField(_('gender'), choices=GENDER_CHOICES, blank=True, null=True)
mugshot = models.FileField(_('mugshot'), upload_to='mugshots', blank=True)
birth_date = models.DateField(_('birth date'), blank=True, null=True)
address1 = models.CharField(_('address1'), blank=True, max_length=100)
address2 = models.CharField(_('address2'), blank=True, max_length=100)
city = models.CharField(_('city'), blank=True, max_length=100)
state = models.CharField(_('state'), blank=True, max_length=100, help_text='or Province')
zip = models.CharField(_('zip'), blank=True, max_length=10)
country = models.CharField(_('country'), blank=True, max_length=100)
mobile = PhoneNumberField(_('mobile'), blank=True)
mobile_provider = models.ForeignKey('MobileProvider', blank=True, null=True)
class Meta:
verbose_name = _('user profile')
verbose_name_plural = _('user profiles')
db_table = 'user_profiles'
def __unicode__(self):
return u"%s" % self.user.get_full_name()
@property
def age(self):
TODAY = datetime.date.today()
if self.birth_date:
return u"%s" % relativedelta.relativedelta(TODAY, self.birth_date).years
else:
return None
@permalink
def get_absolute_url(self):
return ('profile_detail', None, { 'username': self.user.username })
@property
def sms_address(self):
if (self.mobile and self.mobile_provider):
return u"%s@%s" % (re.sub('-', '', self.mobile), self.mobile_provider.domain)
class MobileProvider(models.Model):
""" MobileProvider model """
title = models.CharField(_('title'), max_length=25)
domain = models.CharField(_('domain'), max_length=50, unique=True)
class Meta:
verbose_name = _('mobile provider')
verbose_name_plural = _('mobile providers')
db_table = 'user_mobile_providers'
def __unicode__(self):
return u"%s" % self.title
class ServiceType(models.Model):
""" Service type model """
title = models.CharField(_('title'), blank=True, max_length=100)
url = models.URLField(_('url'), blank=True, help_text='URL with a single \'{user}\' placeholder to turn a username into a service URL.', verify_exists=False)
class Meta:
verbose_name = _('service type')
verbose_name_plural = _('service types')
db_table = 'user_service_types'
def __unicode__(self):
return u"%s" % self.title
class Service(models.Model):
""" Service model """
service = models.ForeignKey(ServiceType)
profile = models.ForeignKey(Profile)
username = models.CharField(_('Name or ID'), max_length=100, help_text="Username or id to be inserted into the service url.")
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = _('service')
verbose_name_plural = _('services')
db_table = 'user_services'
def __unicode__(self):
return u"%s" % self.username
@property
def service_url(self):
return re.sub('{user}', self.username, self.service.url)
@property
def title(self):
return u"%s" % self.service.title
class Link(models.Model):
""" Service type model """
profile = models.ForeignKey(Profile)
title = models.CharField(_('title'), max_length=100)
url = models.URLField(_('url'), verify_exists=True)
class Meta:
verbose_name = _('link')
verbose_name_plural = _('links')
db_table = 'user_links'
def __unicode__(self):
return u"%s" % self.title
|