* More internationalization work;
[webcomics.git] / comicsporn / models.py
CommitLineData
298255d2 1from django.contrib.auth.models import User
315e96d4 2from django.db import models
298255d2 3from django.utils.translation import ugettext_lazy as _
c8070854 4
315e96d4 5
c8070854 6# A very basic data model to begin with
298255d2
JB
7# TODO:
8# - Create sensible default options with translation;
9# - Test the authentification framework;
8e174089 10# - Ensure relevance of the comics building way : block by block;
298255d2
JB
11# - Test upload to images file outside the DB ...;
12# - ...
298255d2
JB
13class Style(models.Model):
14 """
15 TODO: The choice list should be in DB
16 """
17 TAG_NAME_CHOICES = (
18 (_('MG'), _('Manga')),
19 (_('HF'), _('Heroic Fantasy')),
8e174089 20 )
298255d2
JB
21 name = models.CharField(_('name'), max_length=30, choices=TAG_NAME_CHOICES)
22 def __unicode__(self):
23 return self.name
8e174089 24
298255d2
JB
25 class Meta:
26 verbose_name = _('Style')
27 verbose_name_plural = _('Styles')
28 ordering = ('name',)
29
30class UserProfile(models.Model):
31 user = models.OneToOneField(User)
c8070854
JB
32 headshot = models.ImageField(upload_to='user_headshots')
33 is_author = models.BooleanField()
298255d2
JB
34 """
35 The main difference is that the author have is own ads publisher
3be31c18 36 The default behavior of class inheritance is to create OnetoOne relationship between parent and child
298255d2
JB
37 TODO: Which fields are required to interact with the ads publisher ?
38 """
654133ef
JB
39 ADS_PUBLISHER_CHOICES = (
40 ('AS', 'Advert Stream'),
41 ('TJ', 'Traffic Junky'),
42 )
8e174089
JB
43 ads_publisher = models.CharField(_('Ads publisher'), max_length=50, choices=ADS_PUBLISHER_CHOICES)
44 ads_publisher_login = models.CharField(_('Ads publisher login'), max_length=50)
298255d2
JB
45
46 class Meta:
47 verbose_name = _('User profile')
48 verbose_name_plural = _('Users profiles')
49
50# TODO: See how to handle a group of authors and the revenue sharing ... later
c8070854 51
298255d2
JB
52class Comic_block(models.Model):
53 """
8e174089 54 Let's view a comics as an images series
298255d2 55 """
9481a8d3 56 name = models.CharField(_('name'), max_length=50) # probably not useful, it's just simplier to assemble afterwards for author
298255d2
JB
57 number = models.IntegerField(_('number'))
58 content = models.ImageField(upload_to='block_contents')
59 # TODO: probably not useful
60 is_complete = models.BooleanField()
61 upload_datetime = models.DateTimeField(_('upload_datetime'), auto_now=True)
62 authors = models.ManyToManyField(UserProfile, verbose_name=_('authors'))
63 def __unicode__(self):
64 """
65 This idea is to return a visual identifier to the author, self.content is surely bogus to get the image path
66 """
67 return self.name + ' ' + self.content
c8070854 68
298255d2
JB
69 class Meta:
70 verbose_name = _('Comic_block')
71 verbose_name_plural = _('Comic_blocks')
72 ordering = ('name',)
c8070854 73
298255d2
JB
74class Comic(models.Model):
75 """
76 A comic is build from N blocks, whatever they are
77 The ManytoMany relationship is not really required but it much more reflect really : authors can share block between comic
78 """
8e174089 79 title = models.CharField(_('title'), max_length=50)
c8070854 80 rating = models.FloatField()
298255d2
JB
81 is_online = models.BooleanField()
82 publication_date = models.DateField(auto_now=True)
83 blocks = models.ManyToManyField(Comic_block)
84 styles = models.ManyToManyField(Style)
85 def __unicode__(self):
86 return self.title
87
88 class Meta:
8e174089
JB
89 verbose_name = _('Comic')
90 verbose_name_plural = _('Comics')
298255d2 91 ordering = ('title',)