Skip to content

Instantly share code, notes, and snippets.

@k0001
Created October 25, 2008 18:26
Show Gist options
  • Save k0001/19762 to your computer and use it in GitHub Desktop.
Save k0001/19762 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import datetime
from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify
_ = lambda x: x
class ProjectModuleManager(models.Manager):
def create_from_gate(self, gate_cls):
gate_obj = gate_cls()
return self.create(slug=gate_obj.slug)
class ProjectModule(models.Model):
slug = models.CharField(_(u'slug'), max_length=31, primary_key=True)
objects = ProjectModuleManager()
class Meta:
verbose_name = _(u'project module')
verbose_name_plural = _(u'project modules')
def __unicode__(self):
return self.slug
def _get_gate(self):
from sex.apps.projects.modules import gateway
return gateway.available_gates[self.slug]
gate = property(_get_gate)
def attach_project(self, project):
return self.gate.attach_project_base(project)
def detach_project(self, project):
return self.gate.detach_project_base(project)
name = property(lambda self: self.gate.verbose_name)
class Project(models.Model):
slug = models.CharField(_(u'slug'), max_length=255, primary_key=True)
name = models.CharField(_(u'name'), max_length=255)
description = models.TextField(_(u'description'))
owner = models.ForeignKey(User, verbose_name=_(u'owner'),
related_name='owned_project_set')
members = models.ManyToManyField(User, verbose_name=_(u'members'))
modules = models.ManyToManyField(ProjectModule,
verbose_name=_(u'project modules'))
pub_date = models.DateTimeField(_(u'date published'),
default=datetime.datetime.utcnow)
last_update = models.DateTimeField(_(u'last update'))
class Meta:
verbose_name = _(u'project')
verbose_name_plural = _(u'projects')
get_latest_by = 'last_update'
def save(self, force_insert=False, force_update=False):
if not self.slug:
slug = slugify(self.name)
if Project.objects.filter(slug=slug).count():
raise ValueError('name: %s' % self.name)
self.slug = slug
self.last_update = datetime.datetime.utcnow()
super(Project, self).save(force_insert, force_update)
@models.permalink
def get_absolute_url(self):
return ('projects_project_detail', [self.slug])
def __unicode__(self):
return self.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment