/johnny/tests/testapp/models.py

https://bitbucket.org/jmoiron/johnny-cache/ · Python · 202 lines · 169 code · 23 blank · 10 comment · 0 complexity · 12539d33c8d14c0d8b23ccf61f09d2cc MD5 · raw file

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """Test models for Johnny-Cache"""
  4. from django.db import models
  5. from django.db.models import permalink
  6. from django.conf import settings
  7. from django.utils.translation import ugettext_lazy as _
  8. #from basic.people.models import Person
  9. class Issue24Model(models.Model):
  10. one = models.PositiveIntegerField()
  11. two = models.PositiveIntegerField()
  12. class User(models.Model):
  13. """User model."""
  14. first_name = models.CharField('first name', blank=True, max_length=128)
  15. last_name = models.CharField('last name', blank=True, max_length=128)
  16. username = models.CharField('username', blank=True, max_length=128)
  17. def __repr__(self):
  18. return '<User: %s %s>' % (self.first_name, self.last_name)
  19. class PersonType(models.Model):
  20. """Person type model."""
  21. title = models.CharField(_('title'), max_length=100)
  22. slug = models.SlugField(_('slug'), unique=True)
  23. class Meta:
  24. verbose_name = _('person type')
  25. verbose_name_plural = _('person types')
  26. ordering = ('title',)
  27. def __unicode__(self):
  28. return '%s' % self.title
  29. @permalink
  30. def get_absolute_url(self):
  31. return ('person_type_detail', None, {'slug': self.slug})
  32. # some details left out of the Person model, in order to avoid a requirement
  33. # on python-dateutil
  34. class Person(models.Model):
  35. """Person model."""
  36. GENDER_CHOICES = (
  37. (1, 'Male'),
  38. (2, 'Female'),
  39. )
  40. user = models.ForeignKey(User, blank=True, null=True)
  41. first_name = models.CharField(_('first name'), blank=True, max_length=100)
  42. middle_name = models.CharField(_('middle name'), blank=True, max_length=100)
  43. last_name = models.CharField(_('last name'), blank=True, max_length=100)
  44. slug = models.SlugField(_('slug'), unique=True)
  45. gender = models.PositiveSmallIntegerField(_('gender'), choices=GENDER_CHOICES, blank=True, null=True)
  46. mugshot = models.FileField(_('mugshot'), upload_to='mugshots', blank=True)
  47. mugshot_credit = models.CharField(_('mugshot credit'), blank=True, max_length=200)
  48. birth_date = models.DateField(_('birth date'), blank=True, null=True)
  49. person_types = models.ManyToManyField(PersonType, blank=True)
  50. website = models.URLField(_('website'), blank=True, verify_exists=True)
  51. class Meta:
  52. verbose_name = _('person')
  53. verbose_name_plural = _('people')
  54. ordering = ('last_name', 'first_name',)
  55. def __unicode__(self):
  56. return u'%s' % self.full_name
  57. @property
  58. def full_name(self):
  59. return u'%s %s' % (self.first_name, self.last_name)
  60. @permalink
  61. def get_absolute_url(self):
  62. return ('person_detail', None, {'slug': self.slug})
  63. class Genre(models.Model):
  64. """Genre model"""
  65. title = models.CharField(max_length=100)
  66. slug = models.SlugField(unique=True)
  67. class Meta:
  68. ordering = ('title',)
  69. def __unicode__(self):
  70. return '%s' % self.title
  71. @permalink
  72. def get_absolute_url(self):
  73. return ('book_genre_detail', None, { 'slug': self.slug })
  74. class Publisher(models.Model):
  75. """Publisher"""
  76. title = models.CharField(max_length=100)
  77. prefix = models.CharField(max_length=20, blank=True)
  78. slug = models.SlugField(unique=True)
  79. website = models.URLField(blank=True, verify_exists=False)
  80. class Meta:
  81. ordering = ('title',)
  82. def __unicode__(self):
  83. return '%s' % self.full_title
  84. @property
  85. def full_title(self):
  86. return '%s %s' % (self.prefix, self.title)
  87. @permalink
  88. def get_absolute_url(self):
  89. return ('book_publisher_detail', None, { 'slug':self.slug })
  90. class Book(models.Model):
  91. """Listing of books"""
  92. title = models.CharField(max_length=255)
  93. prefix = models.CharField(max_length=20, blank=True)
  94. subtitle = models.CharField(blank=True, max_length=255)
  95. slug = models.SlugField(unique=True)
  96. authors = models.ManyToManyField(Person, limit_choices_to={'person_types__slug__exact': 'author'}, related_name='books')
  97. isbn = models.CharField(max_length=14, blank=True)
  98. pages = models.PositiveSmallIntegerField(blank=True, null=True, default=0)
  99. publisher = models.ForeignKey(Publisher, blank=True, null=True)
  100. published = models.DateField(blank=True, null=True)
  101. cover = models.FileField(upload_to='books', blank=True)
  102. description = models.TextField(blank=True)
  103. genre = models.ManyToManyField(Genre, blank=True)
  104. created = models.DateTimeField(auto_now_add=True)
  105. modified = models.DateTimeField(auto_now=True)
  106. class Meta:
  107. ordering = ('title',)
  108. def __unicode__(self):
  109. return '%s' % self.full_title
  110. @property
  111. def full_title(self):
  112. if self.prefix:
  113. return '%s %s' % (self.prefix, self.title)
  114. else:
  115. return '%s' % self.title
  116. @permalink
  117. def get_absolute_url(self):
  118. return ('book_detail', None, { 'slug': self.slug })
  119. @property
  120. def amazon_url(self):
  121. if self.isbn:
  122. try:
  123. return 'http://www.amazon.com/dp/%s/?%s' % (self.isbn, settings.AMAZON_AFFILIATE_EXTENTION)
  124. except:
  125. return 'http://www.amazon.com/dp/%s/' % self.isbn
  126. return ''
  127. class Highlight(models.Model):
  128. """Highlights from books"""
  129. user = models.ForeignKey(User)
  130. book = models.ForeignKey(Book)
  131. highlight = models.TextField()
  132. page = models.CharField(blank=True, max_length=20)
  133. created = models.DateTimeField(auto_now_add=True)
  134. modified = models.DateTimeField(auto_now=True)
  135. def __unicode__(self):
  136. return '%s' % self.highlight
  137. @permalink
  138. def get_absolute_url(self):
  139. return ('book_detail', None, { 'slug': self.book.slug })
  140. class Page(models.Model):
  141. """Page model"""
  142. user = models.ForeignKey(User)
  143. book = models.ForeignKey(Book)
  144. current_page = models.PositiveSmallIntegerField(default=0)
  145. created = models.DateTimeField(auto_now_add=True)
  146. class Meta:
  147. ordering = ('-created',)
  148. def __unicode__(self):
  149. return '%s' % self.current_page
  150. class Milk(models.Model):
  151. """A meaningless model designed to test unicode ability. This might screw
  152. up databases that can't handle unicode table/column names."""
  153. name = models.CharField(blank=True, max_length=20, db_column=u'名前')
  154. chocolate = models.BooleanField(blank=True, db_column=u'チョコレート')
  155. class Meta:
  156. db_table = u'ミルク'