|
@@ -1,19 +1,21 @@
|
|
from datetime import datetime, timedelta
|
|
from datetime import datetime, timedelta
|
|
-from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
|
|
-from django.db import models
|
|
|
|
-from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
|
+from django.contrib.auth.models import User
|
|
from django.core.urlresolvers import reverse
|
|
from django.core.urlresolvers import reverse
|
|
|
|
+from django.db import models
|
|
from django.template.defaultfilters import slugify
|
|
from django.template.defaultfilters import slugify
|
|
-
|
|
|
|
-from django.contrib.auth.models import User
|
|
|
|
|
|
+from django.utils.translation import ugettext_lazy as _
|
|
|
|
+from django_extensions.db.fields import AutoSlugField
|
|
from django_extensions.db.models import TimeStampedModel
|
|
from django_extensions.db.models import TimeStampedModel
|
|
|
|
+
|
|
from remember.managers import PublishedManager
|
|
from remember.managers import PublishedManager
|
|
|
|
|
|
|
|
+
|
|
class PublishExpiringModel(TimeStampedModel):
|
|
class PublishExpiringModel(TimeStampedModel):
|
|
- expires_on=models.DateTimeField(_('Expires on'), default=datetime.today()+timedelta(days=7), blank=True, null=True)
|
|
|
|
- published=models.BooleanField(_('Published'), default=False)
|
|
|
|
- published_on=models.DateTimeField(_('Published on'))
|
|
|
|
|
|
+ expires_on = models.DateTimeField(_('Expires on'), default=datetime.today()+timedelta(days=7), blank=True, null=True)
|
|
|
|
+ published = models.BooleanField(_('Published'), default=False)
|
|
|
|
+ published_on = models.DateTimeField(_('Published on'))
|
|
|
|
|
|
objects = PublishedManager()
|
|
objects = PublishedManager()
|
|
|
|
|
|
@@ -21,8 +23,8 @@ class PublishExpiringModel(TimeStampedModel):
|
|
abstract=True
|
|
abstract=True
|
|
|
|
|
|
class RemembrancePhoto(PublishExpiringModel):
|
|
class RemembrancePhoto(PublishExpiringModel):
|
|
- name=models.CharField(_('Name'), max_length=100)
|
|
|
|
- image=models.ImageField(_('Image'), upload_to='remember/photos/')
|
|
|
|
|
|
+ name = models.CharField(_('Name'), max_length=100)
|
|
|
|
+ image = models.ImageField(_('Image'), upload_to='remember/photos/')
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
ordering = ('-published_on',)
|
|
ordering = ('-published_on',)
|
|
@@ -34,13 +36,13 @@ class RemembrancePhoto(PublishExpiringModel):
|
|
class InMemoriam(PublishExpiringModel):
|
|
class InMemoriam(PublishExpiringModel):
|
|
'''In Memorum model.
|
|
'''In Memorum model.
|
|
Effectively an anniversary obit. Runs anytime, not just at TOD.'''
|
|
Effectively an anniversary obit. Runs anytime, not just at TOD.'''
|
|
- title=models.CharField(_('Title'), max_length=140)
|
|
|
|
- slug=models.SlugField(_('Slug'), unique=True)
|
|
|
|
- dateline=models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
|
- name=models.CharField(_('Name'), max_length=70, blank=True, null=True)
|
|
|
|
- copy=models.TextField(_('Copy'))
|
|
|
|
- photos=models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
|
- military=models.BooleanField(_('Military service?'), default=False)
|
|
|
|
|
|
+ title = models.CharField(_('Title'), max_length=140)
|
|
|
|
+ slug = AutoSlugField(_('slug'), populate_from='title', editable=True)
|
|
|
|
+ dateline = models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
|
+ name = models.CharField(_('Name'), max_length=70, blank=True, null=True)
|
|
|
|
+ copy = models.TextField(_('Copy'))
|
|
|
|
+ photos = models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
|
+ military = models.BooleanField(_('Military service?'), default=False)
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
ordering = ('-published_on',)
|
|
ordering = ('-published_on',)
|
|
@@ -57,12 +59,12 @@ class InMemoriam(PublishExpiringModel):
|
|
class Remembrance(PublishExpiringModel):
|
|
class Remembrance(PublishExpiringModel):
|
|
'''Remembrance model.
|
|
'''Remembrance model.
|
|
An obituary by any other name.'''
|
|
An obituary by any other name.'''
|
|
- name=models.CharField(_('Name'), max_length=100)
|
|
|
|
- slug=models.SlugField(_('Slug'), unique=True)
|
|
|
|
- dateline=models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
|
- body=models.TextField(_('Body'))
|
|
|
|
- photos=models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
|
- military=models.BooleanField(_('Military service?'), default=False)
|
|
|
|
|
|
+ name = models.CharField(_('Name'), max_length=100)
|
|
|
|
+ slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
|
|
|
|
+ dateline = models.CharField(_('Dateline'), blank=True, null=True, max_length=100)
|
|
|
|
+ body = models.TextField(_('Body'))
|
|
|
|
+ photos = models.ManyToManyField(RemembrancePhoto, blank=True, null=True)
|
|
|
|
+ military = models.BooleanField(_('Military service?'), default=False)
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
ordering = ('-published_on',)
|
|
ordering = ('-published_on',)
|
|
@@ -80,24 +82,24 @@ class Remembrance(PublishExpiringModel):
|
|
class Announcement(PublishExpiringModel):
|
|
class Announcement(PublishExpiringModel):
|
|
'''Announcement model.
|
|
'''Announcement model.
|
|
A simple announcement of a death.'''
|
|
A simple announcement of a death.'''
|
|
- first_name=models.CharField(_('First name'), max_length=70)
|
|
|
|
- middle_name=models.CharField(_('Middle name'), max_length=70, blank=True, null=True)
|
|
|
|
- last_name=models.CharField(_('Last name'), max_length=70)
|
|
|
|
- slug=models.SlugField(_('Slug'), unique=True)
|
|
|
|
- copy=models.TextField(_('Copy'))
|
|
|
|
|
|
+ first_name = models.CharField(_('First name'), max_length=70)
|
|
|
|
+ middle_name = models.CharField(_('Middle name'), max_length=70, blank=True, null=True)
|
|
|
|
+ last_name = models.CharField(_('Last name'), max_length=70)
|
|
|
|
+ slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
|
|
|
|
+ copy = models.TextField(_('Copy'))
|
|
'''
|
|
'''
|
|
- nickname=models.CharField(_('Nickname'), blank=True, null=True, max_length=100)
|
|
|
|
- residence=models.CharField(_('Residence'), blank=True, null=True, max_length=100)
|
|
|
|
- fixed_age=models.IntegerField(_('Age'), max_length=3, blank=True, null=True)
|
|
|
|
- birth_year=models.IntegerField(max_length=4, blank=True, null=True)
|
|
|
|
- birth_date=models.DateField(blank=True, null=True)
|
|
|
|
- death_date=models.DateField(blank=True, null=True)
|
|
|
|
- death_location=models.CharField(_('Death location'), blank=True, null=True, max_length=200)
|
|
|
|
- remembrance=models.ForeignKey(Remembrance, blank=True, null=True)
|
|
|
|
- service_date=models.DateTimeField(blank=True, null=True)
|
|
|
|
- service_location=models.CharField(blank=True, null=True, max_length=200)
|
|
|
|
- armed_service=models.BooleanField(_('Armed service'), default=False)
|
|
|
|
- service_branch=models.CharField(_('Service branch'), blank=True, null=True, max_length=20)'''
|
|
|
|
|
|
+ nickname = models.CharField(_('Nickname'), blank=True, null=True, max_length=100)
|
|
|
|
+ residence = models.CharField(_('Residence'), blank=True, null=True, max_length=100)
|
|
|
|
+ fixed_age = models.IntegerField(_('Age'), max_length=3, blank=True, null=True)
|
|
|
|
+ birth_year = models.IntegerField(max_length=4, blank=True, null=True)
|
|
|
|
+ birth_date = models.DateField(blank=True, null=True)
|
|
|
|
+ death_date = models.DateField(blank=True, null=True)
|
|
|
|
+ death_location = models.CharField(_('Death location'), blank=True, null=True, max_length=200)
|
|
|
|
+ remembrance = models.ForeignKey(Remembrance, blank=True, null=True)
|
|
|
|
+ service_date = models.DateTimeField(blank=True, null=True)
|
|
|
|
+ service_location = models.CharField(blank=True, null=True, max_length=200)
|
|
|
|
+ armed_service = models.BooleanField(_('Armed service'), default=False)
|
|
|
|
+ service_branch = models.CharField(_('Service branch'), blank=True, null=True, max_length=20)'''
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
ordering = ('-published_on',)
|
|
ordering = ('-published_on',)
|
|
@@ -134,12 +136,12 @@ class Announcement(PublishExpiringModel):
|
|
|
|
|
|
class Service(PublishExpiringModel):
|
|
class Service(PublishExpiringModel):
|
|
'''Service model.'''
|
|
'''Service model.'''
|
|
- announcement=models.ForeignKey(Announcement, blank=True, null=True)
|
|
|
|
- name=models.CharField(_('Title'), max_length=100, blank=True, null=True)
|
|
|
|
- slug=models.SlugField(_('Slug'), unique=True, blank=True)
|
|
|
|
- location=models.CharField(_('Location'), max_length=200, blank=True, null=True)
|
|
|
|
- date=models.DateTimeField(_('Date and time'), blank=True, null=True)
|
|
|
|
- body=models.TextField(_('Body'))
|
|
|
|
|
|
+ announcement = models.ForeignKey(Announcement, blank=True, null=True)
|
|
|
|
+ name = models.CharField(_('Title'), max_length=100, blank=True, null=True)
|
|
|
|
+ slug = AutoSlugField(_('slug'), populate_from='name', editable=True)
|
|
|
|
+ location = models.CharField(_('Location'), max_length=200, blank=True, null=True)
|
|
|
|
+ date = models.DateTimeField(_('Date and time'), blank=True, null=True)
|
|
|
|
+ body = models.TextField(_('Body'))
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
verbose_name = _('sevice')
|
|
verbose_name = _('sevice')
|
|
@@ -150,13 +152,6 @@ class Service(PublishExpiringModel):
|
|
return self.announcement.slug + " memorial service"
|
|
return self.announcement.slug + " memorial service"
|
|
else:
|
|
else:
|
|
return u'%s' % self.name
|
|
return u'%s' % self.name
|
|
-
|
|
|
|
- def save(self):
|
|
|
|
- if not self.slug and self.announcement:
|
|
|
|
- self.slug = self.announcement.slug
|
|
|
|
- else:
|
|
|
|
- self.slug = slugify(self.name)
|
|
|
|
- super(TimeStampedModel, self).save()
|
|
|
|
|
|
|
|
#@models.permalink
|
|
#@models.permalink
|
|
#def get_absolute_url(self):
|
|
#def get_absolute_url(self):
|