diff --git a/AKModel/migrations/0006_translation_akmodel.py b/AKModel/migrations/0006_translation_akmodel.py new file mode 100644 index 0000000000000000000000000000000000000000..a4fe749bfe65fe494c49b8643492558cd1e7739f --- /dev/null +++ b/AKModel/migrations/0006_translation_akmodel.py @@ -0,0 +1,121 @@ +# Generated by Django 2.2.6 on 2019-10-12 12:34 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('AKModel', '0005_ak_slot'), + ] + + operations = [ + migrations.AlterModelOptions( + name='event', + options={'ordering': ['name'], 'verbose_name': 'Event', 'verbose_name_plural': 'Events'}, + ), + migrations.AlterField( + model_name='ak', + name='event', + field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, + to='AKModel.Event', verbose_name='Event'), + ), + migrations.AlterField( + model_name='ak', + name='interest', + field=models.IntegerField(default=-1, help_text='Expected number of people', verbose_name='Interest'), + ), + migrations.AlterField( + model_name='ak', + name='reso', + field=models.BooleanField(default=False, help_text='Intends to submit a resolution', + verbose_name='Resolution Intention'), + ), + migrations.AlterField( + model_name='ak', + name='short_name', + field=models.CharField(blank=True, help_text='Name displayed in the schedule', max_length=64, unique=True, + verbose_name='Short Name'), + ), + migrations.AlterField( + model_name='ak', + name='tags', + field=models.ManyToManyField(blank=True, help_text='Tags provided by owners', to='AKModel.AKTag', + verbose_name='Tags'), + ), + migrations.AlterField( + model_name='ak', + name='track', + field=models.ForeignKey(help_text='Track the AK belongs to', null=True, + on_delete=django.db.models.deletion.SET_NULL, to='AKModel.AKTrack', + verbose_name='Track'), + ), + migrations.AlterField( + model_name='akowner', + name='email', + field=models.EmailField(blank=True, help_text='Contact mail', max_length=128, + verbose_name='E-Mail Address'), + ), + migrations.AlterField( + model_name='akowner', + name='event', + field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, + to='AKModel.Event', verbose_name='Event'), + ), + migrations.AlterField( + model_name='akowner', + name='institution', + field=models.CharField(blank=True, help_text='Uni etc.', max_length=128, verbose_name='Institution'), + ), + migrations.AlterField( + model_name='akowner', + name='name', + field=models.CharField(help_text='Name to identify an AK owner by', max_length=256, + verbose_name='Nickname'), + ), + migrations.AlterField( + model_name='akrequirement', + name='event', + field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, + to='AKModel.Event', verbose_name='Event'), + ), + migrations.AlterField( + model_name='akrequirement', + name='name', + field=models.CharField(help_text='Name of the Requirement', max_length=128, unique=True, + verbose_name='Name'), + ), + migrations.AlterField( + model_name='akslot', + name='event', + field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, + to='AKModel.Event', verbose_name='Event'), + ), + migrations.AlterField( + model_name='aktrack', + name='color', + field=models.CharField(blank=True, help_text='Color for displaying', max_length=7, verbose_name='Color'), + ), + migrations.AlterField( + model_name='aktype', + name='color', + field=models.CharField(blank=True, help_text='Color for displaying', max_length=7, verbose_name='Color'), + ), + migrations.AlterField( + model_name='event', + name='place', + field=models.CharField(help_text='City etc. the event takes place in', max_length=128, + verbose_name='Place'), + ), + migrations.AlterField( + model_name='room', + name='building', + field=models.CharField(help_text='Name/number of the building', max_length=256, verbose_name='Building'), + ), + migrations.AlterField( + model_name='room', + name='event', + field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, + to='AKModel.Event', verbose_name='Event'), + ), + ] diff --git a/AKModel/models.py b/AKModel/models.py index 7f7f682a70d1b410e5155dae6c0da16e4a3fcd1d..54498b26512e123a4c400b1ecdb5bd1df7f94d3e 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -1,36 +1,39 @@ # Create your models here. from django.db import models +from django.utils.translation import gettext_lazy as _ 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') + 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. the event takes place in')) + active = models.BooleanField(verbose_name=_('Active State'), help_text=_('Marks currently active events')) class Meta: - verbose_name = 'Event' - verbose_name_plural = 'Events' + verbose_name = _('Event') + verbose_name_plural = _('Events') ordering = ['name'] 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') + name = models.CharField(max_length=256, verbose_name=_('Nickname'), help_text=_('Name to identify an AK owner by')) + email = models.EmailField(max_length=128, blank=True, verbose_name=_('E-Mail Address'), help_text=_('Contact mail')) + institution = models.CharField(max_length=128, blank=True, verbose_name=_('Institution'), help_text=_('Uni 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') + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) class Meta: - verbose_name = 'AK Owner' - verbose_name_plural = 'AK Owners' + verbose_name = _('AK Owner') + verbose_name_plural = _('AK Owners') ordering = ['name'] unique_together = [['name', 'institution']] @@ -38,108 +41,112 @@ class AKOwner(models.Model): 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') + 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 for displaying')) # TODO model availability class Meta: - verbose_name = 'AK Type' - verbose_name_plural = 'AK Types' + 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') + 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 for displaying')) class Meta: - verbose_name = 'AK Track' - verbose_name_plural = 'AK Tracks' + 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') + 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' + 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') + name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'), help_text=_('Name of the Requirement')) - event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) class Meta: - verbose_name = 'AK Requirement' - verbose_name_plural = 'AK Requirements' + 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') + 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 the 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') + 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') + 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 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 resolution')) + 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') + 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') + interest = models.IntegerField(default=-1, verbose_name=_('Interest'), help_text=_('Expected number of people')) - event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) class Meta: - verbose_name = 'AK' - verbose_name_plural = 'AKs' + verbose_name = _('AK') + verbose_name_plural = _('AKs') class Room(models.Model): """ A room describes where an AK can be held. """ - name = models.CharField(max_length=64, verbose_name='Name', help_text='Name or number of the room') - building = models.CharField(max_length=256, verbose_name='Building', help_text='Name or number of the building') - capacity = models.IntegerField(verbose_name='Capacity', help_text='Maximum number of people') - properties = models.ManyToManyField(to=AKRequirement, verbose_name='Properties', - help_text='AK requirements fulfilled by the room') + name = models.CharField(max_length=64, verbose_name=_('Name'), help_text=_('Name or number of the room')) + building = models.CharField(max_length=256, verbose_name=_('Building'), help_text=_('Name/number of the building')) + capacity = models.IntegerField(verbose_name=_('Capacity'), help_text=_('Maximum number of people')) + properties = models.ManyToManyField(to=AKRequirement, verbose_name=_('Properties'), + help_text=_('AK requirements fulfilled by the room')) # TODO model availability - event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) class Meta: - verbose_name = 'Room' - verbose_name_plural = 'Rooms' + verbose_name = _('Room') + verbose_name_plural = _('Rooms') ordering = ['building', 'name'] unique_together = [['name', 'building']] @@ -147,16 +154,17 @@ class Room(models.Model): class AKSlot(models.Model): """ An AK Mapping matches an AK to a room during a certain time. """ - ak = models.ForeignKey(to=AK, on_delete=models.CASCADE, verbose_name='AK', help_text='AK being mapped') - room = models.ForeignKey(to=Room, null=True, on_delete=models.SET_NULL, verbose_name='Room', - help_text='Room the AK will take place in') - start = models.DateTimeField(verbose_name='Slot Begin', help_text='Time and date the slot begins') - duration = models.DecimalField(max_digits=4, decimal_places=2, default=2, verbose_name='Duration', - help_text='Length in hours') + ak = models.ForeignKey(to=AK, on_delete=models.CASCADE, verbose_name=_('AK'), help_text=_('AK being mapped')) + room = models.ForeignKey(to=Room, null=True, on_delete=models.SET_NULL, verbose_name=_('Room'), + help_text=_('Room the AK will take place in')) + start = models.DateTimeField(verbose_name=_('Slot Begin'), help_text=_('Time and date the slot begins')) + duration = models.DecimalField(max_digits=4, decimal_places=2, default=2, verbose_name=_('Duration'), + help_text=_('Length in hours')) - event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) class Meta: - verbose_name = 'AK Slot' - verbose_name_plural = 'AK Slots' + verbose_name = _('AK Slot') + verbose_name_plural = _('AK Slots') ordering = ['start', 'room']