From 5196b7a6e01d6bd3cac93a8e552d0494b281f77b Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 29 Sep 2016 01:19:35 +0200 Subject: [PATCH 01/11] Priprava na odstraneni stareho Seznamu. --- prednasky/admin.py | 15 ++++- .../migrations/0003_auto_20160929_0117.py | 64 +++++++++++++++++++ prednasky/models.py | 53 +++++++++++++-- prednasky/views.py | 4 +- 4 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 prednasky/migrations/0003_auto_20160929_0117.py diff --git a/prednasky/admin.py b/prednasky/admin.py index bbcea848..555c72fa 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -1,7 +1,16 @@ from django.contrib import admin +from reversion.admin import VersionAdmin -from models import Prednaska, Seznam, Hlasovani +from models import Prednaska, Hlasovani -admin.site.register(Seznam) -admin.site.register(Prednaska) admin.site.register(Hlasovani) + +class PrednaskaAdmin(VersionAdmin): +# fieldsets = [ +# (None, {'fields': ['pdf', 'cas', 'stran', 'nazev', 'komentar']}), +# ] + list_display = ['nazev', 'org', 'obor'] + list_filter = ['org','obor'] + search_fields = [] + +admin.site.register(Prednaska,PrednaskaAdmin) diff --git a/prednasky/migrations/0003_auto_20160929_0117.py b/prednasky/migrations/0003_auto_20160929_0117.py new file mode 100644 index 00000000..c72e565b --- /dev/null +++ b/prednasky/migrations/0003_auto_20160929_0117.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0002_auto_20160417_2347'), + ] + + operations = [ + migrations.RenameModel( + old_name='Seznam', + new_name='Seznam_old', + ), + migrations.AlterModelOptions( + name='hlasovani', + options={'ordering': ['ucastnik', 'prednaska'], 'verbose_name': 'Hlasov\xe1n\xed', 'verbose_name_plural': 'Hlasov\xe1n\xed'}, + ), + migrations.AlterModelOptions( + name='prednaska', + options={'ordering': ['org', 'nazev'], 'verbose_name': 'P\u0159edn\xe1\u0161ka', 'verbose_name_plural': 'P\u0159edn\xe1\u0161ky'}, + ), + migrations.AddField( + model_name='prednaska', + name='popis', + field=models.TextField(help_text=b'Neve\xc5\x99ejn\xc3\xbd popis pro ostatn\xc3\xad orgy', null=True, verbose_name=b'Popis pro orgy'), + ), + migrations.AlterField( + model_name='hlasovani', + name='id', + field=models.AutoField(serialize=False, primary_key=True), + ), + migrations.AlterField( + model_name='prednaska', + name='anotace', + field=models.TextField(help_text=b'Ve\xc5\x99ejn\xc3\xa1 anotace v hlasov\xc3\xa1n\xc3\xad', null=True, verbose_name=b'Anotace'), + ), + migrations.AlterField( + model_name='prednaska', + name='id', + field=models.AutoField(serialize=False, primary_key=True), + ), + migrations.AlterField( + model_name='prednaska', + name='obor', + field=models.CharField(help_text=b'Podmno\xc5\xbeina MFIOB', max_length=5, verbose_name=b'Obor'), + ), + migrations.AlterField( + model_name='prednaska', + name='seznam', + field=models.ForeignKey(to='prednasky.Seznam'), + ), + migrations.AlterModelTable( + name='hlasovani', + table='prednasky_hlasovani', + ), + migrations.AlterModelTable( + name='prednaska', + table='prednasky_prednaska', + ), + ] diff --git a/prednasky/models.py b/prednasky/models.py index 0f94f500..a405ce12 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -1,10 +1,27 @@ # -*- coding: utf-8 -*- from django.db import models -from seminar.models import Organizator +from seminar.models import Organizator,Soustredeni + +CHOICES_STAV = ( +(1, 'Návrh'), +(2, 'Bude') +) + +class Seznam_old(models.Model): + pass + +#class Seznam(models.Model): +# class Meta: +# db_table = 'prednasky_seznam' +# verbose_name = u'Seznam přednášek' +# verbose_name_plural = u'Seznamy přednášek' +# ordering = ['soustredeni', 'stav'] +# +# id = models.AutoField(primary_key = True) +# soustredeni = models.ForeignKey(Soustredeni,null = True, default = None) +# stav = models.IntegerField('Stav',choices=CHOICES_STAV,default = 2) -class Seznam(models.Model): - pass CHOICES_OBTIZNOST = ( (1, 'Lehká'), @@ -19,15 +36,39 @@ CHOICES_BODY = ( ) class Prednaska(models.Model): + class Meta: + db_table = 'prednasky_prednaska' + verbose_name = u'Přednáška' + verbose_name_plural = u'Přednášky' + ordering = ['org', 'nazev'] + + id = models.AutoField(primary_key = True) nazev = models.CharField('Název', max_length = 300) org = models.ForeignKey(Organizator) - anotace = models.TextField('Anotace') + popis = models.TextField('Popis pro orgy',null = True,help_text = 'Neveřejný popis pro ostatní orgy') + anotace = models.TextField('Anotace',null = True, help_text = 'Veřejná anotace v hlasování') obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST) - obor = models.CharField('Obor', max_length = 5) + obor = models.CharField('Obor', max_length = 5, help_text = 'Podmnožina MFIOB') klicova = models.CharField('Klíčová slova', max_length = 200, null = True, blank = True) - seznam = models.ForeignKey(Seznam, blank = True, default = None) + seznam = models.ForeignKey(Seznam_old) + +#class Prednaska_Seznam(models.Model): +# class Meta: +# db_table = 'prednasky_prednaska_seznam' +# verbose_name = u'Přednáška v seznamu' +# verbose_name_plural = u'Přednášky v seznamech' +# id = models.AutoField(primary_key = True) +# prednaska = models.ForeignKey(Prednaska) +# seznam = models.ForeignKey(Seznam) +# class Hlasovani(models.Model): + class Meta: + db_table = 'prednasky_hlasovani' + verbose_name = u'Hlasování' + verbose_name_plural = u'Hlasování' + ordering = ['ucastnik', 'prednaska'] + id = models.AutoField(primary_key = True) prednaska = models.ForeignKey(Prednaska) body = models.IntegerField('Body', default = 0, choices = CHOICES_BODY) ucastnik = models.CharField('Účastník', max_length = 100) diff --git a/prednasky/views.py b/prednasky/views.py index bcaa32f5..e9f29a33 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -1,11 +1,11 @@ from django.shortcuts import render from prednasky.forms import NewPrednaskyForm -from prednasky.models import Seznam, Hlasovani, Prednaska +from prednasky.models import Seznam_old, Hlasovani, Prednaska from django.shortcuts import HttpResponseRedirect def newPrednaska(request): # zjistime k jakemu soustredeni se vaze nove vytvarena galerie - prednasky = Seznam.objects.first() + prednasky = Seznam_old.objects.first() # obsluha formulare umoznujiciho multiple nahravani fotek if request.method == 'POST': form = NewPrednaskyForm(request.POST, request.FILES) From c803014e774316466ad1205468edcef56469baa8 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 29 Sep 2016 01:54:22 +0200 Subject: [PATCH 02/11] Migrace na novy model. Predchozi commit nefunguje, pouzijte tento. --- .../migrations/0003_auto_20160929_0117.py | 2 +- .../0004_remove_prednaska_seznam.py | 18 +++++++ .../migrations/0005_auto_20160929_0153.py | 49 +++++++++++++++++++ prednasky/models.py | 44 ++++++++--------- prednasky/views.py | 4 +- 5 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 prednasky/migrations/0004_remove_prednaska_seznam.py create mode 100644 prednasky/migrations/0005_auto_20160929_0153.py diff --git a/prednasky/migrations/0003_auto_20160929_0117.py b/prednasky/migrations/0003_auto_20160929_0117.py index c72e565b..9e2cfb17 100644 --- a/prednasky/migrations/0003_auto_20160929_0117.py +++ b/prednasky/migrations/0003_auto_20160929_0117.py @@ -51,7 +51,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='prednaska', name='seznam', - field=models.ForeignKey(to='prednasky.Seznam'), + field=models.ForeignKey(to='prednasky.Seznam_old'), ), migrations.AlterModelTable( name='hlasovani', diff --git a/prednasky/migrations/0004_remove_prednaska_seznam.py b/prednasky/migrations/0004_remove_prednaska_seznam.py new file mode 100644 index 00000000..d149199f --- /dev/null +++ b/prednasky/migrations/0004_remove_prednaska_seznam.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0003_auto_20160929_0117'), + ] + + operations = [ + migrations.RemoveField( + model_name='prednaska', + name='seznam', + ), + ] diff --git a/prednasky/migrations/0005_auto_20160929_0153.py b/prednasky/migrations/0005_auto_20160929_0153.py new file mode 100644 index 00000000..8aacd6fd --- /dev/null +++ b/prednasky/migrations/0005_auto_20160929_0153.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0041_konfery'), + ('prednasky', '0004_remove_prednaska_seznam'), + ] + + operations = [ + migrations.CreateModel( + name='Prednaska_Seznam', + fields=[ + ('id', models.AutoField(serialize=False, primary_key=True)), + ('prednaska', models.ForeignKey(to='prednasky.Prednaska')), + ], + options={ + 'db_table': 'prednasky_prednaska_seznam', + 'verbose_name': 'P\u0159edn\xe1\u0161ka v seznamu', + 'verbose_name_plural': 'P\u0159edn\xe1\u0161ky v seznamech', + }, + ), + migrations.CreateModel( + name='Seznam', + fields=[ + ('id', models.AutoField(serialize=False, primary_key=True)), + ('stav', models.IntegerField(default=2, verbose_name=b'Stav', choices=[(1, b'N\xc3\xa1vrh'), (2, b'Bude')])), + ('soustredeni', models.ForeignKey(default=None, to='seminar.Soustredeni', null=True)), + ], + options={ + 'ordering': ['soustredeni', 'stav'], + 'db_table': 'prednasky_seznam', + 'verbose_name': 'Seznam p\u0159edn\xe1\u0161ek', + 'verbose_name_plural': 'Seznamy p\u0159edn\xe1\u0161ek', + }, + ), + migrations.DeleteModel( + name='Seznam_old', + ), + migrations.AddField( + model_name='prednaska_seznam', + name='seznam', + field=models.ForeignKey(to='prednasky.Seznam'), + ), + ] diff --git a/prednasky/models.py b/prednasky/models.py index a405ce12..1b069e3b 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -8,19 +8,19 @@ CHOICES_STAV = ( (2, 'Bude') ) -class Seznam_old(models.Model): - pass +#class Seznam_old(models.Model): +# pass -#class Seznam(models.Model): -# class Meta: -# db_table = 'prednasky_seznam' -# verbose_name = u'Seznam přednášek' -# verbose_name_plural = u'Seznamy přednášek' -# ordering = ['soustredeni', 'stav'] -# -# id = models.AutoField(primary_key = True) -# soustredeni = models.ForeignKey(Soustredeni,null = True, default = None) -# stav = models.IntegerField('Stav',choices=CHOICES_STAV,default = 2) +class Seznam(models.Model): + class Meta: + db_table = 'prednasky_seznam' + verbose_name = u'Seznam přednášek' + verbose_name_plural = u'Seznamy přednášek' + ordering = ['soustredeni', 'stav'] + + id = models.AutoField(primary_key = True) + soustredeni = models.ForeignKey(Soustredeni,null = True, default = None) + stav = models.IntegerField('Stav',choices=CHOICES_STAV,default = 2) CHOICES_OBTIZNOST = ( @@ -50,17 +50,17 @@ class Prednaska(models.Model): obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST) obor = models.CharField('Obor', max_length = 5, help_text = 'Podmnožina MFIOB') klicova = models.CharField('Klíčová slova', max_length = 200, null = True, blank = True) - seznam = models.ForeignKey(Seznam_old) +# seznam = models.ForeignKey(Seznam_old) + +class Prednaska_Seznam(models.Model): + class Meta: + db_table = 'prednasky_prednaska_seznam' + verbose_name = u'Přednáška v seznamu' + verbose_name_plural = u'Přednášky v seznamech' + id = models.AutoField(primary_key = True) + prednaska = models.ForeignKey(Prednaska) + seznam = models.ForeignKey(Seznam) -#class Prednaska_Seznam(models.Model): -# class Meta: -# db_table = 'prednasky_prednaska_seznam' -# verbose_name = u'Přednáška v seznamu' -# verbose_name_plural = u'Přednášky v seznamech' -# id = models.AutoField(primary_key = True) -# prednaska = models.ForeignKey(Prednaska) -# seznam = models.ForeignKey(Seznam) -# class Hlasovani(models.Model): class Meta: diff --git a/prednasky/views.py b/prednasky/views.py index e9f29a33..bcaa32f5 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -1,11 +1,11 @@ from django.shortcuts import render from prednasky.forms import NewPrednaskyForm -from prednasky.models import Seznam_old, Hlasovani, Prednaska +from prednasky.models import Seznam, Hlasovani, Prednaska from django.shortcuts import HttpResponseRedirect def newPrednaska(request): # zjistime k jakemu soustredeni se vaze nove vytvarena galerie - prednasky = Seznam_old.objects.first() + prednasky = Seznam.objects.first() # obsluha formulare umoznujiciho multiple nahravani fotek if request.method == 'POST': form = NewPrednaskyForm(request.POST, request.FILES) From 0c67eccd9209ea45809312dbd903cd1a7d280a52 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 29 Sep 2016 03:59:28 +0200 Subject: [PATCH 03/11] Fungujici verze spravy prednasek a hlasovani. --- prednasky/admin.py | 59 ++++++++++++++++--- prednasky/migrations/0006_hlasovani_seznam.py | 20 +++++++ .../migrations/0007_prednaska_seznamy.py | 19 ++++++ .../migrations/0008_auto_20160929_0225.py | 25 ++++++++ .../migrations/0009_auto_20160929_0354.py | 49 +++++++++++++++ prednasky/models.py | 53 ++++++++++------- prednasky/views.py | 15 +++-- 7 files changed, 206 insertions(+), 34 deletions(-) create mode 100644 prednasky/migrations/0006_hlasovani_seznam.py create mode 100644 prednasky/migrations/0007_prednaska_seznamy.py create mode 100644 prednasky/migrations/0008_auto_20160929_0225.py create mode 100644 prednasky/migrations/0009_auto_20160929_0354.py diff --git a/prednasky/admin.py b/prednasky/admin.py index 555c72fa..a1d0e63c 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -1,16 +1,59 @@ +# -*- coding: utf-8 -*- from django.contrib import admin +from django.contrib import messages +from django import forms from reversion.admin import VersionAdmin +from autocomplete_light import shortcuts as autocomplete_light +from django.db import models -from models import Prednaska, Hlasovani +from models import Prednaska, Seznam, STAV_NAVRH +from seminar.models import Soustredeni + +class Seznam_PrednaskaInline(admin.TabularInline): +# form = autocomplete_light.modelform_factory(Prednaska, autocomplete_fields=['nazev'], fields=['nazev']) + model = Prednaska.seznamy.through +# fields = ['nazev', 'org', 'obor' ] +# extra = 0 +# formfield_overrides = { +# models.TextField: {'widget': forms.TextInput}, +# } + +# def get_queryset(self, request): +# qs = super(Seznam_PrednaskaInline, self).get_queryset(request) +# return qs.select_related('seznam', 'prednaska') + +class SeznamAdmin(VersionAdmin): + list_display = ['soustredeni','stav'] + inlines = [Seznam_PrednaskaInline] + +admin.site.register(Seznam,SeznamAdmin) -admin.site.register(Hlasovani) class PrednaskaAdmin(VersionAdmin): -# fieldsets = [ -# (None, {'fields': ['pdf', 'cas', 'stran', 'nazev', 'komentar']}), -# ] - list_display = ['nazev', 'org', 'obor'] - list_filter = ['org','obor'] - search_fields = [] + list_display = ['nazev', 'org', 'obor'] + list_filter = ['org','obor'] + search_fields = [] + + actions = ['move_to_soustredeni'] + + def move_to_soustredeni(self,request,queryset): + sous = Soustredeni.objects.first() + seznam = Seznam.objects.filter(soustredeni=sous,stav=STAV_NAVRH) + if len(seznam) == 0: + self.message_user(request,u"Není definován seznam pro aktuální soustředění, nic se neprovedlo",messages.ERROR) + return + seznam = seznam[0] + for prednaska in queryset: + prednaska.seznamy.add(seznam) + prednaska.save() + + self.message_user(request,u"Vybrané přednášky ({}) přidány jako návrhy na nejbližší soustředění".format(len(queryset))) + + move_to_soustredeni.short_description=u"Přidat přednášky do návrhu na nejbližší soustředění" + + + + + admin.site.register(Prednaska,PrednaskaAdmin) diff --git a/prednasky/migrations/0006_hlasovani_seznam.py b/prednasky/migrations/0006_hlasovani_seznam.py new file mode 100644 index 00000000..c6c1e609 --- /dev/null +++ b/prednasky/migrations/0006_hlasovani_seznam.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0005_auto_20160929_0153'), + ] + + operations = [ + migrations.AddField( + model_name='hlasovani', + name='seznam', + field=models.ForeignKey(default=1, to='prednasky.Seznam'), + preserve_default=False, + ), + ] diff --git a/prednasky/migrations/0007_prednaska_seznamy.py b/prednasky/migrations/0007_prednaska_seznamy.py new file mode 100644 index 00000000..8f054e17 --- /dev/null +++ b/prednasky/migrations/0007_prednaska_seznamy.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0006_hlasovani_seznam'), + ] + + operations = [ + migrations.AddField( + model_name='prednaska', + name='seznamy', + field=models.ManyToManyField(to='prednasky.Seznam'), + ), + ] diff --git a/prednasky/migrations/0008_auto_20160929_0225.py b/prednasky/migrations/0008_auto_20160929_0225.py new file mode 100644 index 00000000..a5bbb92e --- /dev/null +++ b/prednasky/migrations/0008_auto_20160929_0225.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0007_prednaska_seznamy'), + ] + + operations = [ + migrations.RemoveField( + model_name='prednaska_seznam', + name='prednaska', + ), + migrations.RemoveField( + model_name='prednaska_seznam', + name='seznam', + ), + migrations.DeleteModel( + name='Prednaska_Seznam', + ), + ] diff --git a/prednasky/migrations/0009_auto_20160929_0354.py b/prednasky/migrations/0009_auto_20160929_0354.py new file mode 100644 index 00000000..6b4f9486 --- /dev/null +++ b/prednasky/migrations/0009_auto_20160929_0354.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0008_auto_20160929_0225'), + ] + + operations = [ + migrations.AlterField( + model_name='prednaska', + name='anotace', + field=models.TextField(help_text='Ve\u0159ejn\xe1 anotace v hlasov\xe1n\xed', null=True, verbose_name=b'Anotace'), + ), + migrations.AlterField( + model_name='prednaska', + name='klicova', + field=models.CharField(max_length=200, null=True, verbose_name='Kl\xed\u010dov\xe1 slova', blank=True), + ), + migrations.AlterField( + model_name='prednaska', + name='nazev', + field=models.CharField(max_length=300, verbose_name='N\xe1zev'), + ), + migrations.AlterField( + model_name='prednaska', + name='obor', + field=models.CharField(help_text='Podmno\u017eina MFIOB', max_length=5, verbose_name='Obor'), + ), + migrations.AlterField( + model_name='prednaska', + name='obtiznost', + field=models.IntegerField(verbose_name='Obt\xed\u017enost', choices=[(1, b'Lehk\xc3\xa1'), (2, b'St\xc5\x99edn\xc3\xad'), (3, b'T\xc4\x9b\xc5\xbek\xc3\xa1')]), + ), + migrations.AlterField( + model_name='prednaska', + name='popis', + field=models.TextField(help_text='Neve\u0159ejn\xfd popis pro ostatn\xed orgy', null=True, verbose_name='Popis pro orgy'), + ), + migrations.AlterField( + model_name='seznam', + name='stav', + field=models.IntegerField(default=1, verbose_name=b'Stav', choices=[(1, b'N\xc3\xa1vrh'), (2, b'Bude')]), + ), + ] diff --git a/prednasky/models.py b/prednasky/models.py index 1b069e3b..75bb8cb0 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -1,16 +1,22 @@ # -*- coding: utf-8 -*- from django.db import models +from django.utils.encoding import python_2_unicode_compatible +from django.utils.encoding import force_unicode + from seminar.models import Organizator,Soustredeni -CHOICES_STAV = ( -(1, 'Návrh'), -(2, 'Bude') +STAV_NAVRH = 1 +STAV_BUDE = 2 + + +STAV_CHOICES = ( +(STAV_NAVRH, 'Návrh'), +(STAV_BUDE, 'Bude') ) -#class Seznam_old(models.Model): -# pass +@python_2_unicode_compatible class Seznam(models.Model): class Meta: db_table = 'prednasky_seznam' @@ -20,7 +26,10 @@ class Seznam(models.Model): id = models.AutoField(primary_key = True) soustredeni = models.ForeignKey(Soustredeni,null = True, default = None) - stav = models.IntegerField('Stav',choices=CHOICES_STAV,default = 2) + stav = models.IntegerField('Stav',choices=STAV_CHOICES,default = STAV_NAVRH) + + def __str__(self): + return force_unicode(u"Seznam {}přednášek na {}".format(u"návrhů " if self.stav == STAV_NAVRH else "",self.soustredeni)) CHOICES_OBTIZNOST = ( @@ -35,6 +44,7 @@ CHOICES_BODY = ( (1, '1'), ) +@python_2_unicode_compatible class Prednaska(models.Model): class Meta: db_table = 'prednasky_prednaska' @@ -43,25 +53,20 @@ class Prednaska(models.Model): ordering = ['org', 'nazev'] id = models.AutoField(primary_key = True) - nazev = models.CharField('Název', max_length = 300) + nazev = models.CharField(u'Název', max_length = 300) org = models.ForeignKey(Organizator) - popis = models.TextField('Popis pro orgy',null = True,help_text = 'Neveřejný popis pro ostatní orgy') - anotace = models.TextField('Anotace',null = True, help_text = 'Veřejná anotace v hlasování') - obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST) - obor = models.CharField('Obor', max_length = 5, help_text = 'Podmnožina MFIOB') - klicova = models.CharField('Klíčová slova', max_length = 200, null = True, blank = True) -# seznam = models.ForeignKey(Seznam_old) - -class Prednaska_Seznam(models.Model): - class Meta: - db_table = 'prednasky_prednaska_seznam' - verbose_name = u'Přednáška v seznamu' - verbose_name_plural = u'Přednášky v seznamech' - id = models.AutoField(primary_key = True) - prednaska = models.ForeignKey(Prednaska) - seznam = models.ForeignKey(Seznam) + popis = models.TextField(u'Popis pro orgy',null = True,help_text = u'Neveřejný popis pro ostatní orgy') + anotace = models.TextField('Anotace',null = True, help_text = u'Veřejná anotace v hlasování') + obtiznost = models.IntegerField(u'Obtížnost', choices=CHOICES_OBTIZNOST) + obor = models.CharField(u'Obor', max_length = 5, help_text = u'Podmnožina MFIOB') + klicova = models.CharField(u'Klíčová slova', max_length = 200, null = True, blank = True) + seznamy = models.ManyToManyField(Seznam) + + def __str__(self): + return force_unicode(u"{} ({})".format(self.nazev,self.org)) +@python_2_unicode_compatible class Hlasovani(models.Model): class Meta: db_table = 'prednasky_hlasovani' @@ -72,4 +77,8 @@ class Hlasovani(models.Model): prednaska = models.ForeignKey(Prednaska) body = models.IntegerField('Body', default = 0, choices = CHOICES_BODY) ucastnik = models.CharField('Účastník', max_length = 100) + seznam = models.ForeignKey(Seznam) + + def __str__(self): + return force_unicode(u"{} dal {} bodů {} v seznamu {}".format(self.ucastnik, self.body, self.prednaska,self.seznam)) diff --git a/prednasky/views.py b/prednasky/views.py index bcaa32f5..ede98aee 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -3,10 +3,16 @@ from prednasky.forms import NewPrednaskyForm from prednasky.models import Seznam, Hlasovani, Prednaska from django.shortcuts import HttpResponseRedirect + +from models import Prednaska, Seznam, STAV_NAVRH +from seminar.models import Soustredeni + def newPrednaska(request): - # zjistime k jakemu soustredeni se vaze nove vytvarena galerie - prednasky = Seznam.objects.first() - # obsluha formulare umoznujiciho multiple nahravani fotek + # hlasovani se vztahuje k nejnovejsimu soustredeni + sous = Soustredeni.objects.first() + seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first() + print seznam + # obsluha formulare if request.method == 'POST': form = NewPrednaskyForm(request.POST, request.FILES) if form.is_valid(): @@ -18,6 +24,7 @@ def newPrednaska(request): hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0] hlasovani.body = int(request.POST[i]) hlasovani.ucastnik = jmeno + hlasovani.seznam = seznam hlasovani.save() # presmerovani na prave vzniklou galerii @@ -28,7 +35,7 @@ def newPrednaska(request): return render(request, 'prednasky/Base.html', { 'form' : form, - 'prednasky' : prednasky, + 'prednasky' : seznam, }) def Prednaska_hotovo(request): From 67c02ca43764f5e82326338b0beae60eb9702e2f Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 29 Sep 2016 05:08:42 +0200 Subject: [PATCH 04/11] Prednasky (skoro) funkcni. Zobrazeni daneho seznamu pretezuje server, jinak vse ok. --- .../migrations/0010_auto_20160929_0508.py | 24 +++++++++++++++++++ prednasky/models.py | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 prednasky/migrations/0010_auto_20160929_0508.py diff --git a/prednasky/migrations/0010_auto_20160929_0508.py b/prednasky/migrations/0010_auto_20160929_0508.py new file mode 100644 index 00000000..b654e23f --- /dev/null +++ b/prednasky/migrations/0010_auto_20160929_0508.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('prednasky', '0009_auto_20160929_0354'), + ] + + operations = [ + migrations.AlterField( + model_name='prednaska', + name='anotace', + field=models.TextField(help_text='Ve\u0159ejn\xe1 anotace v hlasov\xe1n\xed', null=True, verbose_name=b'Anotace', blank=True), + ), + migrations.AlterField( + model_name='prednaska', + name='popis', + field=models.TextField(help_text='Neve\u0159ejn\xfd popis pro ostatn\xed orgy', null=True, verbose_name='Popis pro orgy', blank=True), + ), + ] diff --git a/prednasky/models.py b/prednasky/models.py index 75bb8cb0..d05ba76d 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -55,8 +55,8 @@ class Prednaska(models.Model): id = models.AutoField(primary_key = True) nazev = models.CharField(u'Název', max_length = 300) org = models.ForeignKey(Organizator) - popis = models.TextField(u'Popis pro orgy',null = True,help_text = u'Neveřejný popis pro ostatní orgy') - anotace = models.TextField('Anotace',null = True, help_text = u'Veřejná anotace v hlasování') + popis = models.TextField(u'Popis pro orgy',null = True, blank = True,help_text = u'Neveřejný popis pro ostatní orgy') + anotace = models.TextField('Anotace',null = True, blank = True, help_text = u'Veřejná anotace v hlasování') obtiznost = models.IntegerField(u'Obtížnost', choices=CHOICES_OBTIZNOST) obor = models.CharField(u'Obor', max_length = 5, help_text = u'Podmnožina MFIOB') klicova = models.CharField(u'Klíčová slova', max_length = 200, null = True, blank = True) From 6f8a6eab1e9699b5ade68f53e85b3aef1c592287 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Thu, 29 Sep 2016 11:08:11 +0200 Subject: [PATCH 05/11] Zverejneni hlasovani o prednaskach. --- seminar/urls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/urls.py b/seminar/urls.py index 9da2858e..725a6037 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -10,8 +10,8 @@ staff_member_required = user_passes_test(lambda u: u.is_staff) urlpatterns = [ # prednasky - #url(r'^prednasky/$', newPrednaska), - #url(r'^prednasky/hotovo$', Prednaska_hotovo), + url(r'^prednasky/$', newPrednaska), + url(r'^prednasky/hotovo$', Prednaska_hotovo), # REDIRECTy url(r'^jak-resit/$', RedirectView.as_view(url='/co-je-MaM/jak-resit/')), From ee1d5fdd18a7ae26ab314b512552fed951b809b4 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Sun, 2 Oct 2016 11:17:32 +0200 Subject: [PATCH 06/11] korektury | pridan zodpovedny org k pdf zodpovednemu orgovy budou chodit e-maily o vsech zmenach --- korektury/admin.py | 21 +++++++++-------- korektury/migrations/0014_add_org_to_pdf.py | 25 +++++++++++++++++++++ korektury/models.py | 8 ++++++- korektury/views.py | 9 +++++++- 4 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 korektury/migrations/0014_add_org_to_pdf.py diff --git a/korektury/admin.py b/korektury/admin.py index 58e460d3..6c9e7cad 100644 --- a/korektury/admin.py +++ b/korektury/admin.py @@ -2,15 +2,18 @@ from django.contrib import admin from reversion.admin import VersionAdmin from korektury.models import KorekturovanePDF + # Register your models here. class KorekturovanePDFAdmin(VersionAdmin): - readonly_fields = ['cas', 'stran'] - fieldsets = [ - (None, {'fields': ['pdf', 'cas', 'stran', 'nazev', 'komentar']}), -# (u'PDF', {'fields': ['pdf']}), - ] - list_display = ['nazev', 'cas', 'stran'] - list_filter = [] - search_fields = [] - + readonly_fields = ['cas', 'stran'] + fieldsets = [ + (None, + {'fields': + ['pdf', 'cas', 'org', 'stran', 'nazev', 'komentar']}), + # (u'PDF', {'fields': ['pdf']}), + ] + list_display = ['nazev', 'cas', 'stran'] + list_filter = [] + search_fields = [] + admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin) diff --git a/korektury/migrations/0014_add_org_to_pdf.py b/korektury/migrations/0014_add_org_to_pdf.py new file mode 100644 index 00000000..9c1292e4 --- /dev/null +++ b/korektury/migrations/0014_add_org_to_pdf.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0041_konfery'), + ('korektury', '0013_rename_autor_org'), + ] + + operations = [ + migrations.AddField( + model_name='korekturovanepdf', + name='org', + field=models.ForeignKey(default=None, + blank=True, + to='seminar.Organizator', + help_text=b'Zodpov\xc4\x9bdn\xc3\xbd\ + organiz\xc3\xa1tor za obsah', + null=True), + ), + ] diff --git a/korektury/models.py b/korektury/models.py index a07c6945..70d57e08 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -48,7 +48,13 @@ class KorekturovanePDF(models.Model): pdf = models.FileField(u'PDF', upload_to = generate_filename) - stran = models.IntegerField(u'počet stran', help_text = 'Počet stran PDF', default = 0) + org = models.ForeignKey(Organizator, blank=True, + help_text='Zodpovědný organizátor za obsah', + null=True, + default=None) + + stran = models.IntegerField(u'počet stran', help_text='Počet stran PDF', + default=0) STATUS_PRIDAVANI = 'pridavani' STATUS_ZANASENI = 'zanaseni' STATUS_ZASTARALE = 'zastarale' diff --git a/korektury/views.py b/korektury/views.py index 49cd480c..ccc224f4 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -52,6 +52,7 @@ class KorekturyView(generic.TemplateView): op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana,pdf = pdf) op.save() + self.send_email_notification_komentar(op, autor, text) elif (action == u'del'): id = int(q.get('id')) op = Oprava.objects.get(id=id) @@ -135,13 +136,19 @@ class KorekturyView(generic.TemplateView): # Prijemci e-mailu emails = set() email = oprava.autor.user.email + # e-mail autora opravy (TODO odstranit z prijemcu) if email: emails.add(email) + # nalezeni e-mailu na organizatory komentaru for komentar in oprava.komentar_set.all(): email = komentar.autor.user.email if email: emails.add(email) - + # zodpovedny org + email_zobpovedny = oprava.pdf.org.user.email + if email_zobpovedny: + emails.add(email_zobpovedny) + send_mail(subject, text, from_email, list(emails)) def get_context_data(self, **kwargs): From 7b44da77383efc9a3c4daf9b0fff16071c3fce68 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Sun, 2 Oct 2016 11:57:11 +0200 Subject: [PATCH 07/11] korekrury | oprava kdyz zodpovedny org neexistuje --- korektury/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/korektury/views.py b/korektury/views.py index ccc224f4..66d87a30 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -145,9 +145,10 @@ class KorekturyView(generic.TemplateView): if email: emails.add(email) # zodpovedny org - email_zobpovedny = oprava.pdf.org.user.email - if email_zobpovedny: - emails.add(email_zobpovedny) + if oprava.pdf.org: + email_zobpovedny = oprava.pdf.org.user.email + if email_zobpovedny: + emails.add(email_zobpovedny) send_mail(subject, text, from_email, list(emails)) From a151044049f565db29e274e04de078911349b2be Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Tue, 4 Oct 2016 19:51:50 +0200 Subject: [PATCH 08/11] korektury | neposilej autorovy textu e-mail --- korektury/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/korektury/views.py b/korektury/views.py index 66d87a30..5eb42bd1 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -136,9 +136,6 @@ class KorekturyView(generic.TemplateView): # Prijemci e-mailu emails = set() email = oprava.autor.user.email - # e-mail autora opravy (TODO odstranit z prijemcu) - if email: - emails.add(email) # nalezeni e-mailu na organizatory komentaru for komentar in oprava.komentar_set.all(): email = komentar.autor.user.email @@ -149,6 +146,9 @@ class KorekturyView(generic.TemplateView): email_zobpovedny = oprava.pdf.org.user.email if email_zobpovedny: emails.add(email_zobpovedny) + # odstran e-mail autora opravy + if email: + emails.discard(email) send_mail(subject, text, from_email, list(emails)) From d03f667c5ee09f8d4ef3eeaf9b6f3d52537315d5 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Tue, 4 Oct 2016 20:06:09 +0200 Subject: [PATCH 09/11] korekturovatko | oprava migrace po flake8 --- .../migrations/0015_auto_20161004_2005.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 korektury/migrations/0015_auto_20161004_2005.py diff --git a/korektury/migrations/0015_auto_20161004_2005.py b/korektury/migrations/0015_auto_20161004_2005.py new file mode 100644 index 00000000..c087a221 --- /dev/null +++ b/korektury/migrations/0015_auto_20161004_2005.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('korektury', '0014_add_org_to_pdf'), + ] + + operations = [ + migrations.AlterField( + model_name='korekturovanepdf', + name='org', + field=models.ForeignKey(default=None, blank=True, to='seminar.Organizator', help_text=b'Zodpov\xc4\x9bdn\xc3\xbd organiz\xc3\xa1tor za obsah', null=True), + ), + ] From de536fe0815a4642ad326c0e0d087283449368b3 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Tue, 4 Oct 2016 23:53:56 +0200 Subject: [PATCH 10/11] Webove rozhrani k prednaskam, prototyp. --- mamweb/urls.py | 3 ++ .../prednasky/metaseznam_prednasek.html | 26 +++++++++++++ .../templates/prednasky/seznam_prednasek.html | 21 ++++++++++ .../prednasky/seznam_prednasek_export.txt | 21 ++++++++++ prednasky/urls.py | 15 +++++++ prednasky/views.py | 39 +++++++++++++++++-- seminar/urls.py | 5 --- 7 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 prednasky/templates/prednasky/metaseznam_prednasek.html create mode 100644 prednasky/templates/prednasky/seznam_prednasek.html create mode 100644 prednasky/templates/prednasky/seznam_prednasek_export.txt create mode 100644 prednasky/urls.py diff --git a/mamweb/urls.py b/mamweb/urls.py index 46e0e292..64769071 100644 --- a/mamweb/urls.py +++ b/mamweb/urls.py @@ -18,6 +18,9 @@ urlpatterns = [ # Korekturovaci aplikace (ma vlastni podadresare) url(r'^', include('korektury.urls')), + + # Prednaskova aplikace (ma vlastni podadresare) + url(r'^', include('prednasky.urls')), # Comments (interni i verejne) url(r'^comments_dj/', include('django_comments.urls')), diff --git a/prednasky/templates/prednasky/metaseznam_prednasek.html b/prednasky/templates/prednasky/metaseznam_prednasek.html new file mode 100644 index 00000000..c6c00b96 --- /dev/null +++ b/prednasky/templates/prednasky/metaseznam_prednasek.html @@ -0,0 +1,26 @@ +{% extends "prednasky/Base.html" %} + + +{% block header %}hlasovani{% endblock %} + +{% block nadpis1a %}{% block nadpis1b %} + Hlasování o přednáškách +{% endblock %}{% endblock %} + +{% block content %} + {# Projdi vsechny seznamy #} +
+
    + {% for seznam in object_list %} +
  • + {% if seznam.stav == 1 %} {# STAV_NAHRH = 1 #} + Návrh přednášek na soustředění {{seznam.soustredeni.misto}} + {% else %} + Seznam přednášek na soustředění {{seznam.soustredeni.misto}} + {% endif %} + Export +
  • + {% endfor %} + +{% endblock %} + diff --git a/prednasky/templates/prednasky/seznam_prednasek.html b/prednasky/templates/prednasky/seznam_prednasek.html new file mode 100644 index 00000000..4d322a88 --- /dev/null +++ b/prednasky/templates/prednasky/seznam_prednasek.html @@ -0,0 +1,21 @@ +{% extends "prednasky/Base.html" %} + + +{% block header %}seznam_prednasek{% endblock %} + +{% block nadpis1a %}{% block nadpis1b %} + Seznam přednášek +{% endblock %}{% endblock %} + +{% block content %} +
    +
      + {# Projdi vsechny prednasky #} + {% for prednaska in object_list %} +
    • + {{prednaska.nazev}} ({{prednaska.obor}},{{prednaska.obtiznost}}) - {{prednaska.org}} +
    • + {% endfor %} + +{% endblock %} + diff --git a/prednasky/templates/prednasky/seznam_prednasek_export.txt b/prednasky/templates/prednasky/seznam_prednasek_export.txt new file mode 100644 index 00000000..2defc91e --- /dev/null +++ b/prednasky/templates/prednasky/seznam_prednasek_export.txt @@ -0,0 +1,21 @@ +{% block content %} +{% spaceless %} +{% for hlas in hlasovani %} +hlas({{hlas.ucastnik}},{{hlas.prednaska.id}},{{hlas.body}}) +{% endfor %} +{% for prednaska in prednasky %} +prednaska({{prednaska.id}},{{prednaska.org.id}},{{prednaska.obtiznost}},{{prednaska.obor}}) +{% endfor %} +{% for org in orgove %} +org({{org.id}},4,0,15) +{% endfor %} +{% for org in orgove %} +{{org.id}};{{org}} +{% endfor %} +{% for prednaska in prednasky %} +{{prednaska.id}};{{prednaska.nazev}};{{prednaska.org.id}} +{{prednaska.body}} +{% endfor %} +{% endspaceless %} +{% endblock %} + diff --git a/prednasky/urls.py b/prednasky/urls.py new file mode 100644 index 00000000..013db150 --- /dev/null +++ b/prednasky/urls.py @@ -0,0 +1,15 @@ +from django.conf.urls import * # NOQA +from django.conf.urls import patterns, url +from django.contrib.auth.decorators import user_passes_test +from . import views + +staff_member_required = user_passes_test(lambda u: u.is_staff) + +urlpatterns = [ + url(r'^prednasky/$', views.newPrednaska), + url(r'^prednasky/hotovo$', views.Prednaska_hotovo), + url(r'^prednasky/metaseznam_prednasek$', staff_member_required(views.MetaSeznamListView.as_view()), name='metaseznam-list'), + url(r'^prednasky/seznam_prednasek/(?P\d+)/$', staff_member_required(views.SeznamListView.as_view()), name='seznam-list'), + url(r'^prednasky/seznam_prednasek/(?P\d+)/export$', staff_member_required(views.SeznamExportView), name='seznam-export'), +# url(r'^korektury/help/', staff_member_required(views.KorekturyHelpView.as_view()), name='korektury-help'), +] diff --git a/prednasky/views.py b/prednasky/views.py index ede98aee..e25af366 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -1,4 +1,5 @@ -from django.shortcuts import render +from django.shortcuts import render,get_object_or_404 +from django.views import generic from prednasky.forms import NewPrednaskyForm from prednasky.models import Seznam, Hlasovani, Prednaska from django.shortcuts import HttpResponseRedirect @@ -24,7 +25,7 @@ def newPrednaska(request): hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0] hlasovani.body = int(request.POST[i]) hlasovani.ucastnik = jmeno - hlasovani.seznam = seznam + hlasovani.seznam = seznam hlasovani.save() # presmerovani na prave vzniklou galerii @@ -40,6 +41,36 @@ def newPrednaska(request): def Prednaska_hotovo(request): return render(request, 'prednasky/hotovo.html') - -# Create your views here. +class MetaSeznamListView(generic.ListView): + model = Seznam + template_name = 'prednasky/metaseznam_prednasek.html' + +class SeznamListView(generic.ListView): + template_name = 'prednasky/seznam_prednasek.html' + def get_queryset(self): + print self.kwargs + self.seznam = get_object_or_404(Seznam,id=self.kwargs["seznam"]) + return Prednaska.objects.filter(seznamy = self.seznam) + + +def SeznamExportView(request,seznam): + seznam_obj = Seznam.objects.get(id=seznam) + hlasovani = Hlasovani.objects.filter(seznam=seznam) + prednasky = Prednaska.objects.filter(seznamy=seznam) + orgove = set(map(lambda x:x.org,prednasky)) + ucastnici = list(set(map(lambda x:x.ucastnik,hlasovani))) + + for p in prednasky: + p.body = [] + for u in ucastnici: + p.body.append(hlasovani.get(ucastnik=u,prednaska=p).body) + + for h in hlasovani: + h.ucastnik = hash(h.ucastnik) + + return render(request, 'prednasky/seznam_prednasek_export.txt', + {"hlasovani":hlasovani,"prednasky":prednasky,"orgove":orgove}, + content_type="text/plain") + + diff --git a/seminar/urls.py b/seminar/urls.py index 725a6037..63666667 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -3,16 +3,11 @@ from django.conf.urls import patterns, url from django.contrib.auth.decorators import user_passes_test from . import views, export from utils import staff_member_required -from prednasky.views import newPrednaska, Prednaska_hotovo from django.views.generic.base import RedirectView staff_member_required = user_passes_test(lambda u: u.is_staff) urlpatterns = [ - # prednasky - url(r'^prednasky/$', newPrednaska), - url(r'^prednasky/hotovo$', Prednaska_hotovo), - # REDIRECTy url(r'^jak-resit/$', RedirectView.as_view(url='/co-je-MaM/jak-resit/')), From f051f62e8faf58a7aec1b5e0d3e35b0f3df5eb54 Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Wed, 5 Oct 2016 08:55:28 +0200 Subject: [PATCH 11/11] Pridan prototyp adminu pro konfery. --- seminar/admin.py | 17 +++++++++- seminar/migrations/0042_auto_20161005_0847.py | 31 +++++++++++++++++++ seminar/models.py | 6 ++-- 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 seminar/migrations/0042_auto_20161005_0847.py diff --git a/seminar/admin.py b/seminar/admin.py index 45cc5fb7..3a61d461 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -11,7 +11,7 @@ from django.db import models from django.contrib.auth.models import User -from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator, Prispevek, Pohadka +from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator, Prispevek, Pohadka, Konfera from autocomplete_light import shortcuts as autocomplete_light @@ -181,6 +181,7 @@ class Soustredeni_UcastniciInline(admin.TabularInline): qs = super(Soustredeni_UcastniciInline, self).get_queryset(request) return qs.select_related('resitel', 'soustredeni') + class Soustredeni_OrganizatoriInline(admin.TabularInline): form = autocomplete_light.modelform_factory(Soustredeni_Organizatori, autocomplete_fields=['organizator'], fields=['organizator'],) model = Soustredeni_Organizatori @@ -468,6 +469,20 @@ class SoustredeniAdmin(VersionAdmin): admin.site.register(Soustredeni, SoustredeniAdmin) +### Konfery +class KonferaAdminForm(forms.ModelForm): + class Meta: + model=Konfera + exclude = [] + +class KonferaAdmin(VersionAdmin): + form = KonferaAdminForm + list_filter = ['soustredeni'] + list_display = ['nazev','soustredeni','organizator','typ_prezentace'] +# inlines = [Konfera_UcastniciInline] + +admin.site.register(Konfera,KonferaAdmin) + ### Novinky class NovinkyAdminForm(forms.ModelForm): diff --git a/seminar/migrations/0042_auto_20161005_0847.py b/seminar/migrations/0042_auto_20161005_0847.py new file mode 100644 index 00000000..27930952 --- /dev/null +++ b/seminar/migrations/0042_auto_20161005_0847.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import seminar.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0041_konfery'), + ] + + operations = [ + migrations.AlterField( + model_name='konfera', + name='materialy', + field=models.FileField(help_text='Dal\u0161\xed materi\xe1ly ke konfe\u0159e zabalen\xe9 do jednoho souboru', upload_to=seminar.models.generate_filename_konfera, verbose_name='materialy', blank=True), + ), + migrations.AlterField( + model_name='konfera', + name='prezentace', + field=models.FileField(help_text='Prezentace nebo fotka posteru', upload_to=seminar.models.generate_filename_konfera, verbose_name='prezentace', blank=True), + ), + migrations.AlterField( + model_name='konfera', + name='prispevek', + field=models.ForeignKey(related_name='konfery', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='seminar.Problem', help_text='\xda\u010dastnick\xfd p\u0159\xedp\u011bvek o konfe\u0159e', null=True, verbose_name='p\u0159\xedsp\u011bvek do \u010d\xedsla'), + ), + ] diff --git a/seminar/models.py b/seminar/models.py index 4c8fc3f0..5a478feb 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -859,7 +859,7 @@ class Konfera(models.Model): org_poznamka = models.TextField(u'neveřejná poznámka', blank=True, help_text=u'Neveřejná poznámka ke konfeře(plain text)') prispevek = models.ForeignKey(Problem, verbose_name=u'příspěvek do čísla', related_name='konfery', - help_text=u'Účastnický přípěvek o konfeře',on_delete = models.SET_NULL, null=True) + help_text=u'Účastnický přípěvek o konfeře',on_delete = models.SET_NULL, null=True, blank=True) TYP_VELETRH = 'veletrh' TYP_PREZENTACE = 'prezentace' TYP_CHOICES = [ @@ -868,9 +868,9 @@ class Konfera(models.Model): ] typ_prezentace = models.CharField(u'typ prezentace', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_VELETRH) prezentace = models.FileField(u'prezentace',help_text = u'Prezentace nebo fotka posteru', - upload_to = generate_filename_konfera) + upload_to = generate_filename_konfera, blank=True) materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru', - upload_to = generate_filename_konfera) + upload_to = generate_filename_konfera, blank=True) def __str__(self): return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni))