Newer
Older
from django.db import models
class Event(models.Model):
""" An event supplies the frame for all Aks.
"""
name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name or iteration of the event')
start = models.DateTimeField(verbose_name='Start', help_text='Time the event begins')
end = models.DateTimeField(verbose_name='End', help_text='Time the event ends')
place = models.CharField(max_length=128, verbose_name='Place', help_text='City etc. where the event takes place')
active = models.BooleanField(verbose_name='Active State', help_text='Marks currently active events')
class AKOwner(models.Model):
""" An AKOwner describes the person organizing/holding an AK.
"""
name = models.CharField(max_length=256, verbose_name='Nickname', help_text='Name used to identify an AK owner')
email = models.EmailField(max_length=128, blank=True, verbose_name='E-Mail Address', help_text='Contact e-mail')
institution = models.CharField(max_length=128, blank=True, verbose_name='Institution', help_text='University etc.')
link = models.URLField(blank=True, verbose_name='Web Link', help_text='Link to Homepage')
event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event')
class Meta:
verbose_name = 'AK Owner'
verbose_name_plural = 'AK Owners'
ordering = ['name']
unique_together = [['name', 'institution']]
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
class AKType(models.Model):
""" An AKType describes the characteristics of an AK, e.g. content vs. recreational.
"""
name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Type')
color = models.CharField(max_length=7, blank=True, verbose_name='Color', help_text='Color to display this type in')
# TODO model availability
class Meta:
verbose_name = 'AK Type'
verbose_name_plural = 'AK Types'
ordering = ['name']
class AKTrack(models.Model):
""" An AKTrack describes a set of semantically related AKs.
"""
name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Track')
color = models.CharField(max_length=7, blank=True, verbose_name='Color', help_text='Color to display this track in')
class Meta:
verbose_name = 'AK Track'
verbose_name_plural = 'AK Tracks'
ordering = ['name']
class AKTag(models.Model):
""" An AKTag is a keyword given to an AK by (one of) its owner(s).
"""
name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Tag')
class Meta:
verbose_name = 'AK Tag'
verbose_name_plural = 'AK Tags'
ordering = ['name']
class AKRequirement(models.Model):
""" An AKRequirement describes something needed to hold an AK, e.g. infrastructure.
"""
name = models.CharField(max_length=128, unique=True, verbose_name='Name', help_text='Name of the AK Requirement')
event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event')
class Meta:
verbose_name = 'AK Requirement'
verbose_name_plural = 'AK Requirements'
ordering = ['name']
class AK(models.Model):
""" An AK is a slot-based activity to be scheduled during an event.
"""
name = models.CharField(max_length=256, unique=True, verbose_name='Name', help_text='Name of the AK')
short_name = models.CharField(max_length=64, unique=True, blank=True, verbose_name='Short Name',
help_text='Name displayed in schedule')
description = models.TextField(blank=True, verbose_name='Description', help_text='Description of the AK')
owners = models.ManyToManyField(to=AKOwner, verbose_name='Owners', help_text='Those organizing the AK')
# TODO generate automatically
link = models.URLField(blank=True, verbose_name='Web Link', help_text='Link to wiki page')
type = models.ForeignKey(to=AKType, on_delete=models.PROTECT, verbose_name='Type', help_text='Type of the AK')
tags = models.ManyToManyField(to=AKTag, blank=True, verbose_name='Tags', help_text='Tags provided by AK owners')
track = models.ForeignKey(to=AKTrack, on_delete=models.SET_NULL, null=True, verbose_name='Track',
help_text='Track the AK belongs to.')
reso = models.BooleanField(verbose_name='Resolution Intention', default=False, help_text='Intends to submit a reso')
requirements = models.ManyToManyField(to=AKRequirement, blank=True, verbose_name='Requirements',
help_text="AK's Requirements")
conflicts = models.ManyToManyField(to='AK', blank=True, related_name='conflict', verbose_name='Conflicting AKs',
help_text='AKs that conflict and thus must not take place at the same time')
prerequisites = models.ManyToManyField(to='AK', blank=True, verbose_name='Prerequisite AKs',
help_text='AKs that should precede this AK in the schedule')
# TODO model availability
notes = models.TextField(blank=True, verbose_name='Internal Notes', help_text='Notes to organizers')
interest = models.IntegerField(default=-1, verbose_name='Interest', help_text='Expected number of people to attend')
event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event')
class Meta:
verbose_name = 'AK'
verbose_name_plural = 'AKs'