diff --git a/seminar/migrations/0012_remove_soustredeni_ucastnici.py b/seminar/migrations/0012_remove_soustredeni_ucastnici.py new file mode 100644 index 00000000..ddb61304 --- /dev/null +++ b/seminar/migrations/0012_remove_soustredeni_ucastnici.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0011_alter_timestamp_def'), + ] + + operations = [ + migrations.RemoveField( + model_name='soustredeni', + name='ucastnici', + ), + ] diff --git a/seminar/migrations/0013_soustredeni_ucastnici_through_model.py b/seminar/migrations/0013_soustredeni_ucastnici_through_model.py new file mode 100644 index 00000000..37027c2d --- /dev/null +++ b/seminar/migrations/0013_soustredeni_ucastnici_through_model.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0012_remove_soustredeni_ucastnici'), + ] + + operations = [ + migrations.CreateModel( + name='Soustredeni_Ucastnici', + fields=[ + ('id', models.AutoField(serialize=False, primary_key=True)), + ('poznamka', models.CharField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k \xfa\u010dasti (plain text)', max_length=64, verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True)), + ('resitel', models.ForeignKey(verbose_name='\u0159e\u0161itel', to='seminar.Resitel')), + ('soustredeni', models.ForeignKey(verbose_name='soust\u0159ed\u011bn\xed', to='seminar.Soustredeni')), + ], + options={ + 'ordering': ['soustredeni', 'resitel'], + 'db_table': 'seminar_soustredeni_ucastnici', + 'verbose_name': '\xda\u010dast na soust\u0159ed\u011bn\xed', + 'verbose_name_plural': '\xda\u010dasti na soust\u0159ed\u011bn\xed', + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='soustredeni', + name='ucastnici', + field=models.ManyToManyField(help_text='Seznam \xfa\u010dastn\xedk\u016f soust\u0159ed\u011bn\xed', to='seminar.Resitel', verbose_name='\xfa\u010dastn\xedci soust\u0159ed\u011bn\xed', through='seminar.Soustredeni_Ucastnici'), + preserve_default=True, + ), + ] diff --git a/seminar/migrations/0014_uprava_poznamek.py b/seminar/migrations/0014_uprava_poznamek.py new file mode 100644 index 00000000..a35a0dc1 --- /dev/null +++ b/seminar/migrations/0014_uprava_poznamek.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0013_soustredeni_ucastnici_through_model'), + ] + + operations = [ + migrations.AddField( + model_name='cislo', + name='poznamka', + field=models.CharField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k \u010d\xedslu (plain text)', max_length=128, verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='prilohareseni', + name='poznamka', + field=models.CharField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k p\u0159\xedloze \u0159e\u0161en\xed (plain text), nap\u0159. o p\u016fvodu', max_length=128, verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='problem', + name='text_problemu_org', + field=models.TextField(verbose_name='neve\u0159ejn\xe9 zad\xe1n\xed a organiz\xe1torsk\xe9 a pozn\xe1mky', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='reseni', + name='poznamka', + field=models.CharField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k \u0159e\u0161en\xed (plain text)', max_length=128, verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='resitel', + name='poznamka', + field=models.TextField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k \u0159e\u0161iteli (plain text)', verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='skola', + name='poznamka', + field=models.TextField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka ke \u0161kole (plain text)', verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='soustredeni_ucastnici', + name='poznamka', + field=models.CharField(default=b'', help_text='Neve\u0159ejn\xe1 pozn\xe1mka k \xfa\u010dasti (plain text)', max_length=128, verbose_name='neve\u0159ejn\xe1 pozn\xe1mka', blank=True), + preserve_default=True, + ), + ] diff --git a/seminar/models.py b/seminar/models.py index 8356b698..d9997e03 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -96,7 +96,7 @@ class Skola(SeminarModelBase): je_zs = models.BooleanField(u'základní stupeň', default=True) je_ss = models.BooleanField(u'střední stupeň', default=True) - poznamka = models.TextField(u'neveřejná poznámka', blank=True, + poznamka = models.TextField(u'neveřejná poznámka', blank=True, default='', help_text=u'Neveřejná poznámka ke škole (plain text)') def __str__(self): @@ -170,7 +170,7 @@ class Resitel(SeminarModelBase): stat = CountryField(u'stát', default='CZ', help_text=u'ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)') - poznamka = models.TextField(u'neveřejná poznámka', blank=True, + poznamka = models.TextField(u'neveřejná poznámka', blank=True, default='', help_text=u'Neveřejná poznámka k řešiteli (plain text)') # Staré (do 2015) MAMOPER.MM_RIESITELIA.ID z DAKOS -- jen u importovaných záznamů @@ -256,6 +256,9 @@ class Cislo(SeminarModelBase): verejne_db = models.BooleanField(u'číslo zveřejněno', db_column='verejne', default=False) + poznamka = models.CharField(u'neveřejná poznámka', blank=True, max_length=128, default='', + help_text=u'Neveřejná poznámka k číslu (plain text)') + def kod(self): return u'%s.%s' % (self.rocnik.rocnik, self.cislo) kod.short_description = u'Kód čísla' @@ -327,7 +330,7 @@ class Problem(SeminarModelBase): zamereni = TaggableManager(verbose_name=u'zaměření', help_text='Zaměření M/F/I/O problému, příp. další tagy', blank=True) - text_problemu_org = models.TextField(u'organizátorský (neveřejný) text', blank=True) + text_problemu_org = models.TextField(u'neveřejné zadání a organizátorské a poznámky', blank=True) text_problemu = models.TextField(u'veřejný text zadání a řešení', blank=True) @@ -354,7 +357,7 @@ class Problem(SeminarModelBase): u'"DOZ:xxx" (MAMOPER.MM_DOZ), "ZAD:rocnik.cislo.uloha.typ" (MAMOPER.MM_ZADANIA), "ULOHA:xxx" (MAMOPER.MM_ULOHY)')) def __str__(self): - return force_unicode(u'%s (%s)' % (self.nazev, self.stav)) + return force_unicode(u'%s' % (self.nazev, )) def kod_v_rocniku(self): if self.typ == self.TYP_ULOHA: @@ -404,8 +407,8 @@ class Reseni(SeminarModelBase): ] forma = models.CharField(u'forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, default=FORMA_PAPIR) - poznamka = models.TextField(u'neveřejná poznámka', blank=True, - help_text=u'Neveřejná poznámka k řešení (plain text, editace v detailu řešení)') + poznamka = models.CharField(u'neveřejná poznámka', blank=True, max_length=128, default='', + help_text=u'Neveřejná poznámka k řešení (plain text)') def __str__(self): return force_unicode(u"%s: %s (%sb)" % (self.resitel.plne_jmeno(), self.problem.nazev, self.body)) @@ -418,7 +421,7 @@ def generate_filename(self, filename): fname = "%s_%s" % ( timezone.now().strftime('%Y-%m-%d-%H:%M'), clean) - return os.path.join(settings.SEMINAR_RESENI_DIRNAME, datedir, fname) + return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname) @reversion.register(ignore_duplicate_revisions=True) @@ -440,7 +443,7 @@ class PrilohaReseni(SeminarModelBase): soubor = models.FileField(u'soubor', upload_to = generate_filename) - poznamka = models.TextField(u'neveřejná poznámka', blank=True, + poznamka = models.CharField(u'neveřejná poznámka', blank=True, max_length=128, default='', help_text=u'Neveřejná poznámka k příloze řešení (plain text), např. o původu') def __str__(self): @@ -474,10 +477,10 @@ class Soustredeni(SeminarModelBase): help_text=u'Místo (název obce, volitelně též objektu') ucastnici = models.ManyToManyField(Resitel, verbose_name=u'účastníci soustředění', - help_text=u'Seznam účastníků soustředění', db_table='seminar_soustredeni_ucastnici') + help_text=u'Seznam účastníků soustředění', through='Soustredeni_Ucastnici') def __str__(self): - return force_unicode(u'%s (%s)' % (self.misto, self.datum_zacatek)) + return force_unicode(u'%s (%s)' % (self.misto, self.datum_zacatku)) def verejne(self): return self.verejne_db @@ -487,6 +490,29 @@ class Soustredeni(SeminarModelBase): return reverse('seminar_soustredeni', kwargs={'pk': self.id}) +@python_2_unicode_compatible +class Soustredeni_Ucastnici(models.Model): + + class Meta: + db_table = 'seminar_soustredeni_ucastnici' + verbose_name = u'Účast na soustředění' + verbose_name_plural = u'Účasti na soustředění' + ordering = ['soustredeni', 'resitel'] + + # Interní ID + id = models.AutoField(primary_key = True) + + resitel = models.ForeignKey(Resitel, verbose_name=u'řešitel') + + soustredeni = models.ForeignKey(Soustredeni, verbose_name=u'soustředění') + + poznamka = models.CharField(u'neveřejná poznámka', max_length=128, blank=True, default='', + help_text=u'Neveřejná poznámka k účasti (plain text)') + + def __str__(self): + return force_unicode(u'%s na %s' % (self.resitel, self.soustredeni, )) + + @python_2_unicode_compatible class VysledkyBase(SeminarModelBase):