Mercurial > public > madeira
diff mysite/band/models.py @ 1:0dcfcdf50c62
Initial import of Madeira project from the private repository.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Mon, 06 Apr 2009 03:10:59 +0000 |
parents | |
children | e602b5302b94 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysite/band/models.py Mon Apr 06 03:10:59 2009 +0000 @@ -0,0 +1,374 @@ +from django.db import models +from django.contrib.localflavor.us.models import USStateField +from django.contrib.localflavor.us.models import PhoneNumberField + +from mysite.photologue.models import Photo +import datetime +import random +import string + +####################################################################### + +class SiteConfig(models.Model): + band_name = models.CharField(max_length = 50) + url = models.URLField(verify_exists = False, max_length = 200) + contact_email = models.EmailField() + ordering_info = models.TextField(help_text = 'Enter instructions on how to order merchandise here') + intro_text = models.TextField(help_text = 'This text appears on the home page.') + intro_photo = models.ForeignKey(Photo) + + def __unicode__(self): + return self.band_name + + class Meta: + verbose_name = "Site Configuration" + verbose_name_plural = "Site Configuration" + +####################################################################### + +class Member(models.Model): + name = models.CharField(max_length = 50, db_index = True) + nickname = models.CharField(max_length = 50, blank = True) + instrument = models.CharField(max_length = 255) + bio = models.TextField(blank = True) + photo = models.FileField(upload_to = 'images/bio/', blank = True) + order = models.SmallIntegerField(help_text = '''Controls order of display on the bio page, lower numbers displayed + first''') + is_active = models.BooleanField(db_index = True) + start_date = models.DateField() + end_date = models.DateField(blank = True, help_text = 'Only used if the member is not active', + default = datetime.date(1985, 1, 1)) + email = models.EmailField() + + def __unicode__(self): + return self.name + + class Meta: + ordering = ('-is_active', 'name') + +####################################################################### + +class Gear(models.Model): + member = models.ForeignKey(Member) + item = models.CharField(max_length = 255) + + def __unicode__(self): + return self.item + + class Meta: + verbose_name_plural = 'Gear List' + +####################################################################### + +class State(models.Model): + name = models.CharField(max_length = 16) + abbrev = USStateField() + + class Meta: + ordering = ('name', ) + + def __unicode__(self): + return self.name + +####################################################################### + +class City(models.Model): + name = models.CharField(max_length = 50) + state = models.ForeignKey(State, null = True, blank = True) + + class Meta: + verbose_name_plural = 'Cities' + ordering = ('name', ) + + def __unicode__(self): + if self.state: + return self.name + u', ' + self.state.abbrev + return self.name + +####################################################################### + +class Venue(models.Model): + name = models.CharField(max_length = 50, db_index = True) + url = models.URLField(verify_exists = False, blank = True) + address = models.CharField(max_length = 255, blank = True) + phone = PhoneNumberField(help_text = "Format: XXX-XXX-XXXX", blank = True) + city = models.ForeignKey(City) + + class Meta: + ordering = ('name', ) + + def __unicode__(self): + return self.name + +####################################################################### + +class Band(models.Model): + name = models.CharField(max_length = 64) + url = models.URLField(verify_exists = False, blank = True) + + class Meta: + ordering = ('name', ) + + def __unicode__(self): + return self.name + +####################################################################### + +class Gig(models.Model): + title = models.CharField(max_length = 50, blank = True, help_text = "Optional; e.g. Some Festival") + url = models.URLField(verify_exists = False, blank = True, help_text = "Optional; e.g. Some Festival's Website") + date = models.DateField(db_index = True) + time = models.TimeField(null = True, blank = True) + venue = models.ForeignKey(Venue, null = True, blank = True) + notes = models.TextField(blank = True) + bands = models.ManyToManyField(Band, blank = True) + flyer = models.ForeignKey(Photo, null = True, blank = True) + + def __unicode__(self): + if self.title: + return u'%s %s %s' % (self.date.strftime('%m/%d/%Y'), self.title, self.venue.name) + elif self.venue: + return u'%s %s' % (self.date.strftime('%m/%d/%Y'), self.venue.name) + else: + return u'' + self.date.strftime('%m/%d/%Y') + + class Meta: + ordering = ('-date', 'time') + +####################################################################### + +class News(models.Model): + title = models.CharField(max_length = 64, blank = True) + date = models.DateField(db_index = True) + author = models.CharField(max_length = 50, blank = True) + text = models.TextField() + markup_enabled = models.BooleanField(default = True, + help_text = 'Check this box to allow Textile style markup in the text field') + photo = models.FileField(upload_to = 'images/news/%Y/%m/%d/', blank = True) + photo_caption = models.CharField(max_length = 50, blank = True) + + def __unicode__(self): + return u'%s %s' % (self.date.strftime('%m/%d/%Y'), self.title) + + class Meta: + ordering = ('-date', ) + verbose_name_plural = "News" + +####################################################################### + +class Article(models.Model): + title = models.CharField(max_length = 64) + date = models.DateField(db_index = True) + text = models.TextField() + markup_enabled = models.BooleanField(default = True, + help_text = 'Check this box to allow Textile style markup in the text field') + source = models.TextField(help_text = '''Enter the source/author for the article, copyright info, etc; it will appear under + the article.''') + url = models.URLField(blank = True, help_text = 'Link to original article; optional') + pdf = models.FileField(upload_to = 'pdf/articles/%Y/%m/%d/', blank = True, + help_text = '''If you want to make the original article available as a PDF download, you may upload it + here.''') + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('date', ) + +####################################################################### + +class Mp3_Set(models.Model): + date = models.DateField(auto_now_add = True, editable = False) + title = models.CharField(max_length = 64) + text = models.TextField() + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('date', ) + verbose_name = "MP3 Set" + +####################################################################### + +class Mp3(models.Model): + mp3_set = models.ForeignKey(Mp3_Set) + title = models.CharField(max_length = 64) + desc = models.CharField(max_length = 128, blank = True) + file = models.FileField(upload_to = 'mp3s/%Y/%m/%d/') + slug = models.SlugField(unique = True) + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('title', ) + verbose_name = "MP3" + +####################################################################### + +class Video_Set(models.Model): + date = models.DateField(auto_now_add = True, editable = False) + title = models.CharField(max_length = 64) + text = models.TextField() + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('date', ) + verbose_name = "Video Set" + +####################################################################### + +class Video(models.Model): + video_set = models.ForeignKey(Video_Set) + title = models.CharField(max_length = 64) + embed_code = models.CharField(max_length = 1024) + + def __unicode__(self): + return self.title + + class Meta: + ordering = ('title', ) + +####################################################################### + +class Record_Label(models.Model): + name = models.CharField(max_length = 64) + url = models.URLField(verify_exists = False, max_length = 200) + + def __unicode__(self): + return self.name + + class Meta: + verbose_name = 'Record Label' + +####################################################################### + +class Album(models.Model): + title = models.CharField(max_length = 64) + photo = models.ForeignKey(Photo) + desc = models.TextField(blank = True) + + def __unicode__(self): + return self.title + + class Meta: + pass + +####################################################################### + +class Album_Track(models.Model): + album = models.ForeignKey(Album) + track_number = models.SmallIntegerField() + track_name = models.CharField(max_length = 64) + + def __unicode__(self): + return self.track_name + + class Meta: + verbose_name = 'Album Track' + ordering = ('album', 'track_number', ) + +####################################################################### + +class Label_Release(models.Model): + record_label = models.ForeignKey(Record_Label) + album = models.ForeignKey(Album) + catalog_number = models.CharField(max_length = 32) + release_date = models.DateField() + + def __unicode__(self): + return u'%s %s %s' % (self.record_label.name, self.album.title, self.catalog_number) + + class Meta: + verbose_name = 'Label Release' + +####################################################################### + +class Album_Merchant(models.Model): + album = models.ForeignKey(Album) + name = models.CharField(max_length = 64) + url = models.URLField(verify_exists = False, max_length = 200) + + def __unicode__(self): + return u'%s (%s)' % (self.name, self.album.title) + + class Meta: + verbose_name = 'Album Merchant' + ordering = ('name', ) + +####################################################################### + +class Merchandise(models.Model): + name = models.CharField(max_length = 64) + desc = models.TextField() + price = models.DecimalField(max_digits = 5, decimal_places = 2) + in_stock = models.BooleanField() + photo = models.ForeignKey(Photo) + + def __unicode__(self): + return self.name + + class Meta: + verbose_name_plural = "Merchandise" + +####################################################################### + +class Fan(models.Model): + statusCodes = (('P', 'Pending'), ('A', 'Active'), ('L', 'Leaving')) + keyLength = 16 + + name = models.CharField(max_length = 32, blank = True) + email = models.EmailField(db_index = True) + location = models.CharField(max_length = 64, blank = True) + status = models.CharField(max_length = 1, choices = statusCodes, default = 'A', + editable = False, db_index = True) + key = models.CharField(max_length = keyLength, editable = False, blank = True, db_index = True) + status_date = models.DateField(default = datetime.date.today, editable = False, db_index = True) + + def __unicode__(self): + if self.name: + return u'%s <%s>' % (self.name, self.email) + return self.email + + class Meta: + ordering = ('name', 'email') + + def setPending(self): + self.status = 'P' + self.status_date = datetime.date.today() + self.genKey() + + def setActive(self): + self.status = 'A' + self.status_date = datetime.date.today() + + def setLeaving(self): + self.status = 'L' + self.status_date = datetime.date.today() + self.genKey() + + def isPending(self): + return self.status == 'P' + + def isLeaving(self): + return self.status == 'L' + + def isActive(self): + return self.status == 'A' + + def current_status(self): + if self.status == 'P': + return 'Pending' + elif self.status == 'L': + return 'Leaving' + elif self.status == 'A': + return 'Active' + else: + return 'Unknown' + + def genKey(self): + self.key = ''.join(random.sample(string.ascii_letters + string.digits, self.keyLength)) +