models.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.contrib.contenttypes.fields import (
  2. GenericForeignKey, GenericRelation,
  3. )
  4. from django.contrib.contenttypes.models import ContentType
  5. from django.db import models
  6. from django.utils.encoding import python_2_unicode_compatible
  7. class Episode(models.Model):
  8. name = models.CharField(max_length=100)
  9. length = models.CharField(max_length=100, blank=True)
  10. author = models.CharField(max_length=100, blank=True)
  11. @python_2_unicode_compatible
  12. class Media(models.Model):
  13. """
  14. Media that can associated to any object.
  15. """
  16. content_type = models.ForeignKey(ContentType, models.CASCADE)
  17. object_id = models.PositiveIntegerField()
  18. content_object = GenericForeignKey()
  19. url = models.URLField()
  20. description = models.CharField(max_length=100, blank=True)
  21. keywords = models.CharField(max_length=100, blank=True)
  22. def __str__(self):
  23. return self.url
  24. #
  25. # Generic inline with unique_together
  26. #
  27. class Category(models.Model):
  28. name = models.CharField(max_length=50)
  29. class PhoneNumber(models.Model):
  30. content_type = models.ForeignKey(ContentType, models.CASCADE)
  31. object_id = models.PositiveIntegerField()
  32. content_object = GenericForeignKey('content_type', 'object_id')
  33. phone_number = models.CharField(max_length=30)
  34. category = models.ForeignKey(Category, models.SET_NULL, null=True, blank=True)
  35. class Meta:
  36. unique_together = (('content_type', 'object_id', 'phone_number',),)
  37. class Contact(models.Model):
  38. name = models.CharField(max_length=50)
  39. phone_numbers = GenericRelation(PhoneNumber, related_query_name='phone_numbers')
  40. #
  41. # Generic inline with can_delete=False
  42. #
  43. class EpisodePermanent(Episode):
  44. pass