diff --git a/program/admin.py b/program/admin.py index df279ff9c652fa2c470551d2c04f1d58228c112a..251eff1c650682854e524b51e7eed2438bd5d176 100644 --- a/program/admin.py +++ b/program/admin.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from django.shortcuts import render from django.conf import settings -from .models import Type, MusicFocus, Category, Topic, RTRCategory, Host, Note, RRule, Schedule, Show, TimeSlot +from .models import Language, Type, MusicFocus, Category, Topic, RTRCategory, Host, Note, RRule, Schedule, Show, TimeSlot from .forms import MusicFocusForm, CollisionForm from datetime import date, datetime, time, timedelta @@ -67,14 +67,20 @@ class CategoryAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('category',)} +class LanguageAdmin(admin.ModelAdmin): + list_display = ('name',) + + class TopicAdmin(admin.ModelAdmin): list_display = ('topic', 'abbrev', 'admin_buttons') prepopulated_fields = {'slug': ('topic',)} + class RTRCategoryAdmin(admin.ModelAdmin): list_display = ('rtrcategory', 'abbrev', ) prepopulated_fields = {'slug': ('rtrcategory',)} + class HostAdmin(admin.ModelAdmin): list_display = ('name',) list_filter = (ActiveHostsFilter, 'is_always_visible',) @@ -101,8 +107,8 @@ class NoteAdmin(admin.ModelAdmin): timeslot_id = int(request.get_full_path().split('/')[-2]) except ValueError: shows = request.user.shows.all() - kwargs['queryset'] = TimeSlot.objects.filter(show__in=shows, note__isnull=True, start__gt=four_weeks_ago, - start__lt=in_twelf_weeks) + kwargs['queryset'] = TimeSlot.objects.filter(show__in=shows, start__gt=four_weeks_ago, + start__lt=in_twelf_weeks) # note__isnull=True else: kwargs['queryset'] = TimeSlot.objects.filter(note=timeslot_id) @@ -152,24 +158,22 @@ class ScheduleInline(admin.TabularInline): class ShowAdmin(admin.ModelAdmin): - filter_horizontal = ('hosts', 'owners', 'musicfocus', 'category', 'topic') + filter_horizontal = ('hosts', 'owners', 'musicfocus', 'category', 'topic', 'language') inlines = (ScheduleInline,) list_display = ('name', 'short_description') - list_filter = (ActiveShowsFilter, 'type', 'category', 'topic', 'musicfocus', 'rtrcategory') + list_filter = (ActiveShowsFilter, 'type', 'category', 'topic', 'musicfocus', 'rtrcategory', 'language') ordering = ('slug',) prepopulated_fields = {'slug': ('name',)} search_fields = ('name', 'short_description', 'description') fields = ( 'predecessor', 'type', 'name', 'slug', 'image', 'logo', 'short_description', 'description', - 'email', 'website', 'hosts', 'owners', 'category', 'rtrcategory', 'topic', + 'email', 'website', 'hosts', 'owners', 'language', 'category', 'rtrcategory', 'topic', 'musicfocus', 'fallback_pool', 'cba_series_id', ) class Media: - from django.conf import settings - media_url = getattr(settings, 'MEDIA_URL') - js = [ media_url + 'js/show_change.js', - media_url + 'js/calendar/lib/moment.min.js', + js = [ settings.MEDIA_URL + 'js/show_change.js', + settings.MEDIA_URL + 'js/calendar/lib/moment.min.js', ] css = { 'all': ('/program/styles.css',) } @@ -465,6 +469,7 @@ class ShowAdmin(admin.ModelAdmin): 'num_collisions': self.num_collisions}) +admin.site.register(Language, LanguageAdmin) admin.site.register(Type, TypeAdmin) admin.site.register(MusicFocus, MusicFocusAdmin) admin.site.register(Category, CategoryAdmin) diff --git a/program/fixtures/languages.yaml b/program/fixtures/languages.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e34961fb4c2eebab45621ceb3d8b8f073ef961d9 --- /dev/null +++ b/program/fixtures/languages.yaml @@ -0,0 +1,192 @@ +- model: program.language + pk: 1 + fields: + name: Deutsch +- model: program.language + pk: 2 + fields: + name: Englisch +- model: program.language + pk: 3 + fields: + name: Spanisch +- model: program.language + pk: 4 + fields: + name: Polnisch +- model: program.language + pk: 5 + fields: + name: Farsi +- model: program.language + pk: 6 + fields: + name: Französisch +- model: program.language + pk: 7 + fields: + name: Slowenisch +- model: program.language + pk: 8 + fields: + name: Persisch +- model: program.language + pk: 9 + fields: + name: Arabisch +- model: program.language + pk: 10 + fields: + name: Türkisch +- model: program.language + pk: 11 + fields: + name: Japanisch +- model: program.language + pk: 12 + fields: + name: Italienisch +- model: program.language + pk: 13 + fields: + name: Tschechisch +- model: program.language + pk: 14 + fields: + name: Russisch +- model: program.language + pk: 15 + fields: + name: Chinesisch +- model: program.language + pk: 16 + fields: + name: Ungarisch +- model: program.language + pk: 17 + fields: + name: Serbisch +- model: program.language + pk: 18 + fields: + name: Portugiesisch +- model: program.language + pk: 19 + fields: + name: Kroatisch +- model: program.language + pk: 20 + fields: + name: Albanisch +- model: program.language + pk: 21 + fields: + name: Dari +- model: program.language + pk: 22 + fields: + name: Bosnisch +- model: program.language + pk: 23 + fields: + name: Kurdisch +- model: program.language + pk: 24 + fields: + name: Aserbaidschanisch +- model: program.language + pk: 25 + fields: + name: Slowakisch +- model: program.language + pk: 26 + fields: + name: Niederländisch +- model: program.language + pk: 27 + fields: + name: Bulgarisch +- model: program.language + pk: 28 + fields: + name: Somali +- model: program.language + pk: 29 + fields: + name: Tschetschenisch +- model: program.language + pk: 30 + fields: + name: Dänisch +- model: program.language + pk: 31 + fields: + name: Rumänisch +- model: program.language + pk: 32 + fields: + name: Thai +- model: program.language + pk: 33 + fields: + name: Finnisch +- model: program.language + pk: 34 + fields: + name: Romanes +- model: program.language + pk: 35 + fields: + name: Griechisch +- model: program.language + pk: 36 + fields: + name: Singhalesisch +- model: program.language + pk: 37 + fields: + name: Urdu +- model: program.language + pk: 38 + fields: + name: Estnisch +- model: program.language + pk: 39 + fields: + name: Mazedonisch +- model: program.language + pk: 40 + fields: + name: Hebräisch +- model: program.language + pk: 41 + fields: + name: Schwedisch +- model: program.language + pk: 42 + fields: + name: Lithauisch +- model: program.language + pk: 43 + fields: + name: Jiddisch +- model: program.language + pk: 44 + fields: + name: Isländisch +- model: program.language + pk: 45 + fields: + name: Litauisch +- model: program.language + pk: 46 + fields: + name: Amharisch +- model: program.language + pk: 47 + fields: + name: Norwegisch +- model: program.language + pk: 48 + fields: + name: Koreanisch \ No newline at end of file diff --git a/program/migrations/0013_auto_20171109_1942.py b/program/migrations/0013_auto_20171109_1942.py new file mode 100644 index 0000000000000000000000000000000000000000..9e6723c42415478eab5586d1bc366423c65e02b7 --- /dev/null +++ b/program/migrations/0013_auto_20171109_1942.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-11-09 19:42 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0012_auto_20171109_1843'), + ] + + operations = [ + migrations.CreateModel( + name='Language', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=32, verbose_name='Language')), + ], + options={ + 'verbose_name': 'Language', + 'verbose_name_plural': 'Languages', + 'ordering': ('language',), + }, + ), + migrations.AlterModelOptions( + name='schedule', + options={'ordering': ('dstart', 'tstart'), 'verbose_name': 'Schedule', 'verbose_name_plural': 'Schedules'}, + ), + migrations.AddField( + model_name='show', + name='language', + field=models.ManyToManyField(blank=True, related_name='language', to='program.Language', verbose_name='Language'), + ), + ] diff --git a/program/models.py b/program/models.py index 5835db6fb728dbe3de63111536cdcd0f007c4f30..c24cde20251d6e18e0c20df01fd142450954c929 100644 --- a/program/models.py +++ b/program/models.py @@ -225,6 +225,18 @@ class RTRCategory(models.Model): return '%s' % self.rtrcategory +class Language(models.Model): + name = models.CharField(_("Language"), max_length=32) + + class Meta: + ordering = ('language',) + verbose_name = _("Language") + verbose_name_plural = _("Languages") + + def __str__(self): + return '%s' % self.name + + class Host(models.Model): name = models.CharField(_("Name"), max_length=128) is_always_visible = models.BooleanField(_("Is always visible"), default=False) @@ -250,6 +262,7 @@ class Show(models.Model): predecessor = models.ForeignKey('self', blank=True, null=True, related_name='successors', verbose_name=_("Predecessor")) hosts = models.ManyToManyField(Host, blank=True, related_name='shows', verbose_name=_("Hosts")) owners = models.ManyToManyField(User, blank=True, related_name='shows', verbose_name=_("Owners")) + language = models.ManyToManyField(Language, blank=True, related_name='language', verbose_name=_("Language")) type = models.ForeignKey(Type, related_name='shows', verbose_name=_("Type")) category = models.ManyToManyField(Category, blank=True, related_name='shows', verbose_name=_("Category")) rtrcategory = models.ForeignKey(RTRCategory, related_name='shows', verbose_name=_("RTR Category")) @@ -348,8 +361,8 @@ class Schedule(models.Model): # Produces error when adding several schedules at the same time. # Do this test in another way, since it is quite unspecific anyway #unique_together = ('rrule', 'byweekday', 'dstart', 'tstart') - verbose_name = _("Program slot") - verbose_name_plural = _("Program slots") + verbose_name = _("Schedule") + verbose_name_plural = _("Schedules") def __str__(self): weekday = self.BYWEEKDAY_CHOICES[self.byweekday][1]