Source code for sandglass.models.userprofile
import datetime
from django.contrib.auth.models import User
from django.core.validators import MinValueValidator
from django.db import models
from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _
from django_extensions.db.models import TimeStampedModel
from sandglass.models.team import Team
from sandglass.models.theme import Theme
from sandglass.models.timemodel import TimeModel
[docs]class UserProfile(TimeStampedModel):
"""Extension model tied to ``django.contrib.auth.models.User``.
Adds sandglass-specific user properties.
"""
user = models.OneToOneField(to=User)
failed_logins = models.SmallIntegerField(
verbose_name=_(u"number of failed logins"),
blank=True, null=True, validators=[MinValueValidator(0)])
# TODO: failed_logins will lock user account if greater than
# sandglass.conf.settings.LOCK_USER_AFTER_FAILED_LOGINS
date_locked = models.DateTimeField(
verbose_name=_(u"lock timestamp"), blank=True, null=True)
teams = models.ManyToManyField(
Team, verbose_name=_(u"teams"), blank=True, null=True)
status_message = models.TextField(
verbose_name=_(u"status message"), blank=True, null=True)
time_model = models.ForeignKey(
TimeModel, verbose_name=_(u"time model"), blank=True, null=True)
date_entry = models.DateField(
verbose_name=_(u"entry date"), default=datetime.date.today)
# TODO: avatar: use django-avatar?
theme = models.ForeignKey(
Theme, verbose_name=_(u"theme"), blank=True, null=True)
class Meta:
app_label = 'sandglass'
[docs]def create_user_profile(sender, instance, created, **kwargs):
"""Creates a ``UserProfile`` as soon as a ``User`` is created."""
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
__all__ = ('UserProfile', 'create_user_profile')