from django.db import models from django.contrib.auth.models import User from django.contrib.sites.models import Site from django.contrib.auth.signals import user_logged_in from django.core.exceptions import ObjectDoesNotExist from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ import datetime import string import random def createId(length): firstchar = string.ascii_letters c = string.digits + string.ascii_letters lastchars = ''.join([random.choice(c) for dummy in xrange(0, length - 1)]) return random.choice(firstchar) + lastchars def login_handler(user, **kwargs): """Verify user profile exists""" try: profile = UserProfile.objects.get(user=user) except ObjectDoesNotExist: profile = UserProfile(user=user) profile.save() return user_logged_in.connect(login_handler) class UserProfile(models.Model): user = models.OneToOneField(User) email_notifications = models.BooleanField(default=False) class Poll(models.Model): # Override django id AutoField with randomly generated hash id = models.CharField( primary_key=True, max_length=8, default=createId(5)) title = models.CharField(_('Title'), max_length=80) pub_date = models.DateField(default=datetime.datetime.now) upd_date = models.DateField(auto_now=True) description = models.CharField(max_length=300) user = models.ForeignKey(User, null=True) def __unicode__(self): return self.title @property def link(self): return 'http://%s%s' % ( Site.objects.get_current(), reverse('meetingpoll', args=(self.id,))) class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.DateTimeField() details = models.CharField(max_length=200, blank=True) votecount = models.IntegerField(default=0, blank=True) class Meta: ordering = ['choice'] def __unicode__(self): return str(self.choice) class Bulletin(models.Model): poll = models.ForeignKey(Poll, editable=False) voter = models.CharField("", max_length=40) def __unicode__(self): return self.voter class Vote(models.Model): choice = models.ForeignKey(Choice) bulletin = models.ForeignKey(Bulletin) voice = models.BooleanField() comment = models.CharField(max_length=80, blank=True) class Meta: ordering = ['choice'] def __unicode__(self): return str(self.voice)