hero_slider.models: 31 total statements, 95.8% covered

Generated: Tue 2013-05-21 16:43 CEST

Source file: /home/dkaufhold/projects/django-hero-slider/src/hero_slider/models.py

Stats: 23 executed, 1 missed, 7 excluded, 65 ignored

  1. """Models for the ``hero_slider`` app."""
  2. from django.contrib.contenttypes import generic
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.db import models
  5. from django.utils.translation import get_language
  6. from django.utils.translation import ugettext_lazy as _
  7. from simple_translation.utils import get_preferred_translation_from_lang
  8. from filer.fields.file import FilerFileField
  9. class SliderItemManager(models.Manager):
  10. """Custom manager for the ``SliderItem`` model."""
  11. def published(self, request):
  12. """
  13. Returns the published slider items in the current language.
  14. :param request: A Request instance.
  15. """
  16. language = getattr(request, 'LANGUAGE_CODE', None)
  17. if not language:
  18. return self.model.objects.none()
  19. qs = self.get_query_set()
  20. qs = qs.filter(
  21. slideritemtitle__is_published=True,
  22. slideritemtitle__language=language,
  23. )
  24. return qs
  25. class SliderItem(models.Model):
  26. """
  27. Resembles an item that should be shown on the front page in a slider.
  28. For translateable fields see the ``SliderItemTitle`` model.
  29. :image: A filer file. This will be the image shown in the slider.
  30. :position: Can be set in order to control the ordering of the slider items.
  31. :content_type: The contenttype of the object this slider item links to.
  32. :object_id: The PK of the object this slider item links to.
  33. """
  34. image = FilerFileField(
  35. verbose_name=_('Image'),
  36. )
  37. position = models.PositiveIntegerField(
  38. verbose_name=_('Position'),
  39. null=True, blank=True,
  40. )
  41. # Generic foreign key
  42. content_type = models.ForeignKey(ContentType)
  43. object_id = models.PositiveIntegerField()
  44. content_object = generic.GenericForeignKey('content_type', 'object_id')
  45. objects = SliderItemManager()
  46. def get_trans(self):
  47. """Returns the translation object for this slider item."""
  48. lang = get_language()
  49. return get_preferred_translation_from_lang(self, lang)
  50. class SliderItemTitle(models.Model):
  51. """
  52. Translateable fields of the ``SliderItem`` model.
  53. :title: The title of this slider item.
  54. :description: A short description of this slider item.
  55. :is_published: If True, this will not show up.
  56. """
  57. title = models.CharField(
  58. max_length=256,
  59. verbose_name=_('Title'),
  60. blank=True,
  61. )
  62. description = models.CharField(
  63. max_length=512,
  64. verbose_name=_('Description'),
  65. blank=True,
  66. )
  67. is_published = models.BooleanField(
  68. verbose_name=_('Is published'),
  69. default=False,
  70. )
  71. # Needed by simple-translation
  72. slider_item = models.ForeignKey(SliderItem, verbose_name=_('Slider item'))
  73. language = models.CharField(max_length=2, verbose_name=_('Language'))