30248205e356666e4cdea88f0337f344a57c2971
1 from django
.contrib
.auth
.models
import User
2 from django
.db
import models
3 from django
.utils
.translation
import ugettext_lazy
as _
6 # A very basic data model to begin with
8 # - Create sensible default options with translation;
9 # - Test the authentification framework;
10 # - Ensure relevance of the comics building way : block by block;
11 # - Test upload to images file outside the DB ...;
13 class Style(models
.Model
):
15 TODO: The choice list should be in DB
18 (_('MG'), _('Manga')),
19 (_('HF'), _('Heroic Fantasy')),
20 (_('SF'), _('Science Fiction')),
22 name
= models
.CharField(_('name'), max_length
=30, choices
=TAG_NAME_CHOICES
)
23 def __unicode__(self
):
27 verbose_name
= _('Style')
28 verbose_name_plural
= _('Styles')
31 class UserProfile(models
.Model
):
32 user
= models
.OneToOneField(User
)
33 headshot
= models
.ImageField(upload_to
='user_headshots')
34 is_author
= models
.BooleanField()
36 The main difference is that the author have is own ads publisher
37 The default behavior of class inheritance is to create OnetoOne relationship between parent and child
38 TODO: Which fields are required to interact with the ads publisher ?
40 ADS_PUBLISHER_CHOICES
= (
41 ('AS', 'Advert Stream'),
42 ('TJ', 'Traffic Junky'),
44 ads_publisher
= models
.CharField(_('Ads publisher'), max_length
=50, choices
=ADS_PUBLISHER_CHOICES
)
45 ads_publisher_login
= models
.CharField(_('Ads publisher login'), max_length
=50)
48 verbose_name
= _('User profile')
49 verbose_name_plural
= _('Users profiles')
51 # TODO: See how to handle a group of authors and the revenue sharing ... later
53 class Comic_block(models
.Model
):
55 Let's view a comics as an image series
57 name
= models
.CharField(_('name'), max_length
=50) # probably not useful, it's just simpler to assemble afterwards for author
58 number
= models
.IntegerField(_('number'))
59 content
= models
.ImageField(upload_to
='block_contents')
60 # TODO: probably not useful
61 is_complete
= models
.BooleanField()
62 upload_datetime
= models
.DateTimeField(_('upload_datetime'), auto_now
=True)
63 authors
= models
.ManyToManyField(UserProfile
, verbose_name
=_('authors'))
64 def __unicode__(self
):
66 This idea is to return a visual identifier to the author, self.content is surely bogus to get the image path
68 return self
.name
+ ' ' + self
.content
71 verbose_name
= _('Comic_block')
72 verbose_name_plural
= _('Comic_blocks')
75 class Comic(models
.Model
):
77 A comic is build from N blocks, whatever they are
78 The ManytoMany relationship is not really required but it much more reflect really : authors can share block between comic
80 title
= models
.CharField(_('title'), max_length
=50)
81 rating
= models
.FloatField()
82 is_online
= models
.BooleanField()
83 publication_date
= models
.DateField(auto_now
=True)
84 blocks
= models
.ManyToManyField(Comic_block
)
85 styles
= models
.ManyToManyField(Style
)
86 def __unicode__(self
):
90 verbose_name
= _('Comic')
91 verbose_name_plural
= _('Comics')