Store year and party as a tuple.
[demoscenemusic.git] / data / models.py
1 # encoding: utf-8
2 from django.db import models
3
4 class Group(models.Model):
5         name = models.CharField(max_length = 80)
6         shortName = models.CharField(max_length = 50, blank = True)
7         website = models.CharField(max_length = 150, blank = True)
8
9         def __unicode__(self):
10                 return self.name + (' (' + self.website + ')' if (self.website != '') else '')
11
12 class Artist(models.Model):
13         name = models.CharField(max_length = 80)
14         realName = models.CharField(max_length = 80, blank = True)
15         groups = models.ManyToManyField(Group, blank = True)
16
17         def __unicode__(self):
18                 return "%s%s" % (self.name, (" / %s" % (" ^ ".join(g.shortName if (g.shortName != '') else g.name for g in self.groups.all()), )) if (self.groups.all()) else '')
19
20 class Party(models.Model):
21         name = models.CharField(max_length = 80)
22         website = models.CharField(max_length = 150, blank = True)
23
24         def __unicode__(self):
25                 return self.name
26
27 class Compo(models.Model):
28         name = models.CharField(max_length = 80)
29
30         def __unicode__(self):
31                 return self.name;
32
33 class Release(models.Model):
34         party = models.ForeignKey(Party)
35         year = models.IntegerField()
36         compo = models.ForeignKey(Compo)
37         place = models.IntegerField()
38         pouetId = models.IntegerField(blank = True, null = True)
39
40         def __unicode__(self):
41                 return self.compo.__unicode__() + ' @ ' + self.party.__unicode__() + ' ' + '%d' % self.year
42
43 class TrackArtist(models.Model):
44         track = models.ForeignKey('Track')
45         artist = models.ForeignKey(Artist)
46         order = models.IntegerField()
47
48         def __unicode__(self):
49                 return self.artist.__unicode__()
50
51         class Meta:
52                 ordering = ['order']
53
54 class RemixArtist(models.Model):
55         track = models.ForeignKey('Track')
56         artist = models.ForeignKey(Artist)
57         order = models.IntegerField()
58
59         def __unicode__(self):
60                 return self.artist.__unicode__()
61
62         class Meta:
63                 ordering = ['order']
64
65 class Style(models.Model):
66         name = models.CharField(max_length = 80)
67
68         def __unicode__(self):
69                 return self.name
70
71 class Track(models.Model):
72         name = models.CharField(max_length = 150)
73         artists = models.ManyToManyField(Artist, through = TrackArtist)
74         styles = models.ManyToManyField(Style, blank = True)
75         remix = models.CharField(max_length = 80, blank = True)
76         remixArtists = models.ManyToManyField(Artist, through = RemixArtist, related_name = 'remixTracks')
77         releases = models.ManyToManyField(Release)
78         length = models.IntegerField()
79         soundcloudLink = models.CharField(max_length = 150, blank = True)
80
81         def __unicode__(self):
82                 #return '%s – %s%s' % (' & '.join(self.artists), self.name, (('%s by %s' % (self.remix, ' & '.join(self.remixArtists) + ')')) if (self.remix != '') else ''))
83                 return u'{1} – {0}'.format(self.name, ' & '.join(a.artist.__unicode__() for a in self.trackartist_set.all()))
84
85 class File(models.Model):
86         track = models.ForeignKey(Track)
87         path = models.CharField(max_length = 150)
88         type = models.CharField(max_length = 50)
89
90         def __unicode__(self):
91                 return self.type + ' (' + self.path + ')'