import uuid from django.db import models from django.contrib.contenttypes import generic from django.contrib.auth.models import AbstractUser from django.contrib.contenttypes.models import ContentType from django.template.defaultfilters import slugify class ServiceProvider(models.Model): uuid = models.CharField( unique=True, max_length=36, default=lambda: str(uuid.uuid4()) ) BACKEND_CHOICES = ( ('http', 'HTTP'), ('smtp', 'SMTP'), ('servo', 'Servo') ) backend_type = models.CharField( max_length=6, default='servo', choices=BACKEND_CHOICES ) name = models.CharField( max_length=128, default='Apple Service Provider' ) http_url = models.URLField(null=True, blank=True) http_username = models.CharField(max_length=128, null=True, blank=True) http_password = models.CharField(max_length=128, null=True, blank=True) smtp_address = models.EmailField(null=True, blank=True) servo_url = models.URLField(null=True, blank=True) class User(AbstractUser): sp = models.ForeignKey(ServiceProvider, null=True) class TaggedItem(models.Model): "A generic tagged item" tag = models.CharField(max_length=128) slug = models.SlugField() kind = models.CharField(max_length=64, default='') object_id = models.PositiveIntegerField() content_type = models.ForeignKey(ContentType) content_object = generic.GenericForeignKey("content_type", "object_id") def save(self, *args, **kwargs): self.slug = slugify(self.tag) super(TaggedItem, self).save(*args, **kwargs) def __unicode__(self): return self.tag class Meta: unique_together = ("content_type", "object_id", "tag",)