~brunobord/beeroverip/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import os.path
import datetime
import random
from django.db import models
from django.utils.translation import ugettext_lazy as _


class Drink(models.Model):
    """Drink meta-model. Abstract class

    * `name`: name of the beer, to be displayed.
    * `slug`: prepopulated from `name`.
	"""

    name = models.CharField(_('name'), max_length=100)
    slug = models.SlugField(_('slug'), max_length=100)

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return '/%s/' % self.slug
    

    @property
    def initial(self):
        return self.name[0]


class Beer(Drink):
    """Beer model."""

    class Meta:
        verbose_name = _('beer')
        verbose_name_plural = _('beers')
        ordering = ('slug',)

    def _picture(self):
        return self.beerimage_set.order_by('?')[0]
    picture = property(_picture)


class NotABeer(Drink):
    """Not-a-Beer model."""

    class Meta:
        verbose_name = _('drink')
        verbose_name_plural = _('drinks')
        ordering = ('slug',)

    def get_absolute_url(self):
        return '/%s/%s/' % ('notabeer', self.slug)

    def _picture(self):
        return self.notabeerimage_set.order_by('?')[0]
    picture = property(_picture)


class DrinkImage(models.Model):
    """Drink image Meta-model.

    * `credits`: text field where you can add meta information, credits, etc.
    * `upload_date`: the date/time the beer has been uploaded.
    """
    credits = models.TextField(_('credits'), blank=True)
    upload_date = models.DateTimeField(_('upload date'),
        default=datetime.datetime.now)

    class Meta:
        abstract = True

    def _url(self):
        return self.picture.url
    url = property(_url)


class BeerImage(DrinkImage):
    """Beer image-related information

    * `beer`: The linked beer.
    * `picture`: image field (requires PIL module).
    """
    beer = models.ForeignKey(Beer)
    picture = models.ImageField(_('picture'), upload_to='beers/', blank=True)


class NotABeerImage(DrinkImage):
    """Image-related information for normal drinks

    * `notabeer`: The linked drink.
    * `picture`: image field (requires PIL module).
    """
    notabeer = models.ForeignKey(NotABeer)
    picture = models.ImageField(_('picture'), upload_to='notabeers/', blank=True)

# EOF