From 2c17e1f4d56d53f596261b9560304b5a0605f6d5 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Tue, 15 Oct 2013 21:44:39 +0200 Subject: [PATCH] Organizes models.py, adds ISO 3166-1 contry code --- dusken/fixtures/country.json | 2 + dusken/models.py | 186 +++++++++++++++++------------------ 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/dusken/fixtures/country.json b/dusken/fixtures/country.json index 068e0b2..7ffa9c5 100644 --- a/dusken/fixtures/country.json +++ b/dusken/fixtures/country.json @@ -4,6 +4,7 @@ "id" : 1, "created": "2013-08-21T19:37:24.851Z", "name": "Norway", + "code": "NO", "updated": "2013-08-21T19:37:24.851Z" }, "model": "dusken.country", @@ -14,6 +15,7 @@ "id" : 2, "created": "2013-08-21T19:37:31.577Z", "name": "Netherlands", + "code": "NL", "updated": "2013-08-21T19:37:31.577Z" }, "model": "dusken.country", diff --git a/dusken/models.py b/dusken/models.py index 101f6ad..161bb03 100644 --- a/dusken/models.py +++ b/dusken/models.py @@ -2,111 +2,46 @@ import django from django.db import models from tastypie.models import create_api_key -class Country(models.Model): - class Meta: - verbose_name_plural = "Countries" - - def __unicode__(self): - return self.name - - name = models.CharField(max_length=50, unique=True) +class BaseModel(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) -class Address(models.Model): - class Meta: - verbose_name_plural = "Addresses" - - def __unicode__(self): - return u"{street}, {code} {city}, {country}".format(street=self.street_address, code=self.postal_code, city=self.city, country=self.country) - - street_address = models.CharField(max_length=255) - city = models.CharField(max_length=100) - country = models.ForeignKey(Country) - postal_code = models.CharField(max_length=10) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - -class Institution(models.Model): - def __unicode__(self): - return u'%s - %s' % (self.short_name, self.name) - - name = models.CharField(max_length=255) - short_name = models.CharField(max_length=16) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - -class PlaceOfStudy(models.Model): - def __unicode__(self): - return u"{institution}, {year}".format(institution=self.institution, year=self.from_date.year) - - from_date = models.DateField() - institution = models.ForeignKey(Institution) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) + abstract = True class Member(django.contrib.auth.models.User): def __unicode__(self): if len(self.first_name) + len(self.last_name) > 0: - return u'{first} {last} ({username})'.format(first=self.first_name, last=self.last_name, username=self.username) + return u'{first} {last} ({username})'.format( + first=self.first_name, + last=self.last_name, + username=self.username) return u"{username}".format(username=self.username) phone_number = models.IntegerField(unique=True, null=True, blank=True) date_of_birth = models.DateField(blank=True, null=True) legacy_id = models.IntegerField(unique=True, null=True, blank=True) - address = models.ForeignKey(Address, null=True, blank=True) - place_of_study = models.ManyToManyField(PlaceOfStudy, null=True, blank=True) + address = models.ForeignKey('dusken.Address', null=True, blank=True) + place_of_study = models.ManyToManyField('dusken.PlaceOfStudy', null=True, blank=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) -class FacebookAuth(models.Model): +class Membership(BaseModel): def __unicode__(self): - return u"{}".format(self.token) + return u"{member}: {fromdate}".format(member=self.member, fromdate=self.start_date) - token = models.CharField(max_length=255, unique=True, null=True, blank=True) - token_expires = models.DateTimeField(null=True, blank=True) - member = models.OneToOneField(Member, null=True, blank=True) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - -class GoogleAuth(models.Model): - def __unicode__(self): - return u"{}".format(self.token) + start_date = models.DateField() + mtype = models.ForeignKey('dusken.MembershipType', db_column='type') + payment = models.ForeignKey('dusken.Payment', unique=True, null=True, blank=True) + member = models.ForeignKey('dusken.Member') - token = models.CharField(max_length=255, unique=True, null=True, blank=True) - token_expires = models.DateTimeField(null=True, blank=True) - member = models.OneToOneField(Member, null=True, blank=True) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - -class ExtendedMemberDetail(models.Model): - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - pass - -class PaymentType(models.Model): - def __unicode__(self): - return u"{}".format(self.name) - - name = models.CharField(max_length=255) - is_active = models.BooleanField(default=True) - -class Payment(models.Model): - def __unicode__(self): - return self.payment_type #TODO - - # Note: More like tokens? - payment_type = models.ForeignKey(PaymentType) - value = models.IntegerField() - transaction_id = models.IntegerField(unique=True, null=True, blank=True) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) + def expires(self): + return self.mtype.end_date() ''' TODO: should validate end_day_of_month and end_month (use datetime exceptions) ''' -class MembershipType(models.Model): +class MembershipType(BaseModel): def __unicode__(self): return u"{}".format(self.name) @@ -114,8 +49,6 @@ class MembershipType(models.Model): duration_months = models.IntegerField(default=12) end_day_of_month = models.IntegerField(default=31) end_month = models.IntegerField(default=7) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) is_active = models.BooleanField(default=True) def end_date(self): @@ -134,23 +67,88 @@ class MembershipType(models.Model): return min(end1, end2) -class Membership(models.Model): +class PaymentType(models.Model): def __unicode__(self): - return u"{member}: {fromdate}".format(member=self.member, fromdate=self.start_date) + return u"{}".format(self.name) - start_date = models.DateField() - mtype = models.ForeignKey(MembershipType, db_column='type') - payment = models.ForeignKey(Payment, unique=True, null=True, blank=True) - member = models.ForeignKey(Member) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) + name = models.CharField(max_length=255) + is_active = models.BooleanField(default=True) - def expires(self): - return self.mtype.end_date() +class Payment(BaseModel): + def __unicode__(self): + return self.payment_type #TODO + + # Note: More like tokens? + payment_type = models.ForeignKey('dusken.PaymentType') + value = models.IntegerField() + transaction_id = models.IntegerField(unique=True, null=True, blank=True) + + +class FacebookAuth(BaseModel): + def __unicode__(self): + return u"{}".format(self.token) + + token = models.CharField(max_length=255, unique=True, null=True, blank=True) + token_expires = models.DateTimeField(null=True, blank=True) + member = models.OneToOneField('dusken.Member', null=True, blank=True) + +class GoogleAuth(BaseModel): + def __unicode__(self): + return u"{}".format(self.token) + + token = models.CharField(max_length=255, unique=True, null=True, blank=True) + token_expires = models.DateTimeField(null=True, blank=True) + member = models.OneToOneField('dusken.Member', null=True, blank=True) + +class Address(BaseModel): + class Meta: + verbose_name_plural = "Addresses" + + def __unicode__(self): + return u"{street}, {code} {city}, {country}".format( + street=self.street_address, + code=self.postal_code, + city=self.city, + country=self.country) + + street_address = models.CharField(max_length=255) + postal_code = models.CharField(max_length=10) + city = models.CharField(max_length=100) + country = models.ForeignKey('dusken.Country', null=True, blank=True) + +class Country(BaseModel): + class Meta: + verbose_name_plural = "Countries" + + def __unicode__(self): + return self.name + + name = models.CharField(max_length=100, unique=True) + code = models.CharField(max_length=3, unique=True) #ISO 3166-1 alpha 2 + +class PlaceOfStudy(BaseModel): + def __unicode__(self): + return u"{institution}, {year}".format( + institution=self.institution, + year=self.from_date.year) + + from_date = models.DateField() + institution = models.ForeignKey('dusken.Institution') + +class Institution(BaseModel): + def __unicode__(self): + return u'%s - %s' % (self.short_name, self.name) + + name = models.CharField(max_length=255) + short_name = models.CharField(max_length=16) + +class ExtendedMemberDetail(BaseModel): + pass class Group(django.contrib.auth.models.Group): def __unicode__(self): return u"{} ({})".format(self.name, self.posix_name) + posix_name = models.CharField(max_length=255, unique=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True)