From 126b4b9cfc1f3486cc21b12ed5d8b03fc00502a0 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Sun, 17 Apr 2016 23:48:39 +0200 Subject: [PATCH 1/4] prednasky | model + admin + migrace --- mamweb/settings_common.py | 1 + prednasky/__init__.py | 0 prednasky/admin.py | 7 + prednasky/migrations/0001_initial.py | 45 ++++++ .../migrations/0002_auto_20160417_2347.py | 24 ++++ prednasky/migrations/__init__.py | 0 prednasky/models.py | 34 +++++ prednasky/tests.py | 3 + prednasky/views.py | 3 + seminar/models.py | 132 +++++++++--------- 10 files changed, 183 insertions(+), 66 deletions(-) create mode 100644 prednasky/__init__.py create mode 100644 prednasky/admin.py create mode 100644 prednasky/migrations/0001_initial.py create mode 100644 prednasky/migrations/0002_auto_20160417_2347.py create mode 100644 prednasky/migrations/__init__.py create mode 100644 prednasky/models.py create mode 100644 prednasky/tests.py create mode 100644 prednasky/views.py diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 81850341..07cf6d61 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -121,6 +121,7 @@ INSTALLED_APPS = ( 'seminar', 'galerie', 'korektury', + 'prednasky', # Admin upravy: diff --git a/prednasky/__init__.py b/prednasky/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/prednasky/admin.py b/prednasky/admin.py new file mode 100644 index 00000000..bbcea848 --- /dev/null +++ b/prednasky/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +from models import Prednaska, Seznam, Hlasovani + +admin.site.register(Seznam) +admin.site.register(Prednaska) +admin.site.register(Hlasovani) diff --git a/prednasky/migrations/0001_initial.py b/prednasky/migrations/0001_initial.py new file mode 100644 index 00000000..c3510548 --- /dev/null +++ b/prednasky/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0036_add_org_to_soustredeni'), + ] + + operations = [ + migrations.CreateModel( + name='Hlasovani', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('body', models.IntegerField(default=0, verbose_name=b'Body', choices=[(0, b'0'), (1, b'1'), (-1, b'-1')])), + ('ucastnik', models.CharField(max_length=100, verbose_name=b'\xc3\x9a\xc4\x8dastn\xc3\xadk')), + ], + ), + migrations.CreateModel( + name='Prednaska', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('nazev', models.CharField(max_length=300, verbose_name=b'N\xc3\xa1zev')), + ('anotace', models.TextField(verbose_name=b'Anotace')), + ('obtiznost', models.IntegerField(verbose_name=b'Obt\xc3\xad\xc5\xbenost', choices=[(1, b'Lehk\xc3\xa1'), (2, b'St\xc5\x99edn\xc3\xad'), (3, b'T\xc4\x9b\xc5\xbek\xc3\xa1')])), + ('obor', models.CharField(max_length=5, verbose_name=b'Obor')), + ('klicova', models.CharField(max_length=200, null=True, verbose_name=b'Kl\xc3\xad\xc4\x8dov\xc3\xa1 slova', blank=True)), + ('org', models.ForeignKey(to='seminar.Organizator')), + ], + ), + migrations.CreateModel( + name='Seznam', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + ), + migrations.AddField( + model_name='hlasovani', + name='prednaska', + field=models.ForeignKey(to='prednasky.Prednaska'), + ), + ] diff --git a/prednasky/migrations/0002_auto_20160417_2347.py b/prednasky/migrations/0002_auto_20160417_2347.py new file mode 100644 index 00000000..f3527e75 --- /dev/null +++ b/prednasky/migrations/0002_auto_20160417_2347.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', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='prednaska', + name='seznam', + field=models.ForeignKey(default=None, blank=True, to='prednasky.Seznam'), + ), + migrations.AlterField( + model_name='hlasovani', + name='body', + field=models.IntegerField(default=0, verbose_name=b'Body', choices=[(-1, b'-1'), (0, b'0'), (1, b'1')]), + ), + ] diff --git a/prednasky/migrations/__init__.py b/prednasky/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/prednasky/models.py b/prednasky/models.py new file mode 100644 index 00000000..0f94f500 --- /dev/null +++ b/prednasky/models.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +from django.db import models +from seminar.models import Organizator + +class Seznam(models.Model): + pass + +CHOICES_OBTIZNOST = ( +(1, 'Lehká'), +(2, 'Střední'), +(3, 'Těžká'), +) + +CHOICES_BODY = ( + (-1, '-1'), + (0, '0'), + (1, '1'), + ) + +class Prednaska(models.Model): + nazev = models.CharField('Název', max_length = 300) + org = models.ForeignKey(Organizator) + anotace = models.TextField('Anotace') + obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST) + obor = models.CharField('Obor', max_length = 5) + klicova = models.CharField('Klíčová slova', max_length = 200, null = True, blank = True) + seznam = models.ForeignKey(Seznam, blank = True, default = None) + +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) + diff --git a/prednasky/tests.py b/prednasky/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/prednasky/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/prednasky/views.py b/prednasky/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/prednasky/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/seminar/models.py b/seminar/models.py index c5df19e9..b617dad4 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -545,13 +545,13 @@ class Reseni(SeminarModelBase): # PrilohaReseni method -def generate_filename(self, filename, directory): +def generate_filename(self, filename): clean = filename.replace('/','-').replace('\0', '') datedir = timezone.now().strftime('%Y-%m') fname = "%s_%s" % ( timezone.now().strftime('%Y-%m-%d-%H:%M'), clean) - return os.path.join(directory, datedir, fname) + return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname) @reversion.register(ignore_duplicate_revisions=True) @@ -571,7 +571,7 @@ class PrilohaReseni(SeminarModelBase): timestamp = models.DateTimeField(u'vytvořeno', default=timezone.now, blank=True, editable=False) - soubor = models.FileField(u'soubor', upload_to = partial(generate_filename,directory=settings.SEMINAR_RESENI_DIR)) + soubor = models.FileField(u'soubor', upload_to = generate_filename) poznamka = models.TextField(u'neveřejná poznámka', blank=True, help_text=u'Neveřejná poznámka k příloze řešení (plain text), např. o původu') @@ -736,69 +736,69 @@ class Soustredeni_Organizatori(models.Model): -@reversion.register(ignore_duplicate_revisions=True) -@python_2_unicode_compatible -class Konfera(models.Model): - class Meta: - db_table = 'seminar_konfera' - verbose_name = u'Konfera' - verbose_name_plural = u'Konfery' - # Interní ID - id = models.AutoField(primary_key = True) - nazev = models.CharField(u'název konfery', max_length=40, help_text = u'Název konfery') - popis = models.TextField(u'popis konfery', blank=True, - help_text=u'Popis konfery k zobrazení na webu') - abstrakt = models.TextField(u'abstrakt', blank=True, - help_text=u'Abstrakt konfery tak, jak byl uveden ve sborníku') - organizator = models.ForeignKey(Organizator, verbose_name=u'organizátor', related_name='konfery', - on_delete = models.SET_NULL, null=True) - ucastnici = models.ManyToManyField(Resitel, verbose_name=u'účastníci konfery', - help_text=u'Seznam účastníků konfery', through='Konfery_Ucastnici') - soustredeni = models.ForeignKey(Soustredeni, verbose_name=u'soustředění', related_name='konfery', - on_delete = models.SET_NULL, null=True) - org_poznamka = models.TextField(u'neveřejná poznámka', blank=True, - help_text=u'Neveřejná poznámka ke konfeře(plain text)') - #prispevek #TODO - TYP_VELETRH = 'veletrh' - TYP_PREZENTACE = 'prezentace' - TYP_CHOICES = [ - (TYP_VELETRH, u'Veletrh (postery)'), - (TYP_PREZENTACE, u'Prezentace (přednáška)'), - ] - 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 = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR)) - materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru', - upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR)) - - def __str__(self): - return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni)) - - - -@reversion.register(ignore_duplicate_revisions=True) -@python_2_unicode_compatible -class Konfery_Ucastnici(models.Model): - - class Meta: - db_table = 'seminar_konfery_ucastnici' - verbose_name = u'Účast na konfeře' - verbose_name_plural = u'Účasti na konfeře' - ordering = ['konfera', 'resitel'] - - # Interní ID - id = models.AutoField(primary_key = True) - - resitel = models.ForeignKey(Resitel, verbose_name=u'řešitel') - - konfera = models.ForeignKey(Konfera, verbose_name=u'konfera') - - poznamka = models.TextField(u'neveřejná poznámka', blank=True, - help_text=u'Neveřejná poznámka k účasti (plain text)') - - def __str__(self): - return force_unicode(u'%s na %s' % (self.resitel, self.konfera, )) - # NOTE: Poteciální DB HOG bez select_related +#@reversion.register(ignore_duplicate_revisions=True) +#@python_2_unicode_compatible +#class Konfera(models.Model): +# class Meta: +# db_table = 'seminar_konfera' +# verbose_name = u'Konfera' +# verbose_name_plural = u'Konfery' +# # Interní ID +# id = models.AutoField(primary_key = True) +# nazev = models.CharField(u'název konfery', max_length=40, help_text = u'Název konfery') +# popis = models.TextField(u'popis konfery', blank=True, +# help_text=u'Popis konfery k zobrazení na webu') +# abstrakt = models.TextField(u'abstrakt', blank=True, +# help_text=u'Abstrakt konfery tak, jak byl uveden ve sborníku') +# organizator = models.ForeignKey(Organizator, verbose_name=u'organizátor', related_name='konfery', +# on_delete = models.SET_NULL, null=True) +# ucastnici = models.ManyToManyField(Resitel, verbose_name=u'účastníci konfery', +# help_text=u'Seznam účastníků konfery', through='Konfery_Ucastnici') +# soustredeni = models.ForeignKey(Soustredeni, verbose_name=u'soustředění', related_name='konfery', +# on_delete = models.SET_NULL, null=True) +# org_poznamka = models.TextField(u'neveřejná poznámka', blank=True, +# help_text=u'Neveřejná poznámka ke konfeře(plain text)') +# #prispevek #TODO +# TYP_VELETRH = 'veletrh' +# TYP_PREZENTACE = 'prezentace' +# TYP_CHOICES = [ +# (TYP_VELETRH, u'Veletrh (postery)'), +# (TYP_PREZENTACE, u'Prezentace (přednáška)'), +# ] +# 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 = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR)) +# materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru', +# upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR)) +# +# def __str__(self): +# return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni)) +# +# +# +#@reversion.register(ignore_duplicate_revisions=True) +#@python_2_unicode_compatible +#class Konfery_Ucastnici(models.Model): +# +# class Meta: +# db_table = 'seminar_konfery_ucastnici' +# verbose_name = u'Účast na konfeře' +# verbose_name_plural = u'Účasti na konfeře' +# ordering = ['konfera', 'resitel'] +# +# # Interní ID +# id = models.AutoField(primary_key = True) +# +# resitel = models.ForeignKey(Resitel, verbose_name=u'řešitel') +# +# konfera = models.ForeignKey(Konfera, verbose_name=u'konfera') +# +# poznamka = models.TextField(u'neveřejná poznámka', blank=True, +# help_text=u'Neveřejná poznámka k účasti (plain text)') +# +# def __str__(self): +# return force_unicode(u'%s na %s' % (self.resitel, self.konfera, )) +# # NOTE: Poteciální DB HOG bez select_related @python_2_unicode_compatible From 5812ef343abfd859195be19a0648d7c2b7a17355 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Mon, 18 Apr 2016 01:14:08 +0200 Subject: [PATCH 2/4] prednasky | form a jeho vyhodnocovani --- prednasky/forms.py | 8 +++++ prednasky/templates/prednasky/Base.html | 40 +++++++++++++++++++++++ prednasky/templates/prednasky/hotovo.html | 11 +++++++ prednasky/views.py | 34 +++++++++++++++++++ seminar/urls.py | 5 +++ 5 files changed, 98 insertions(+) create mode 100644 prednasky/forms.py create mode 100644 prednasky/templates/prednasky/Base.html create mode 100644 prednasky/templates/prednasky/hotovo.html diff --git a/prednasky/forms.py b/prednasky/forms.py new file mode 100644 index 00000000..969232e3 --- /dev/null +++ b/prednasky/forms.py @@ -0,0 +1,8 @@ +# coding: utf-8 +from django import forms + +class NewPrednaskyForm(forms.Form): + ucastnik = forms.CharField(label = 'Tvoje jméno', max_length = 100) + + + diff --git a/prednasky/templates/prednasky/Base.html b/prednasky/templates/prednasky/Base.html new file mode 100644 index 00000000..6b96372b --- /dev/null +++ b/prednasky/templates/prednasky/Base.html @@ -0,0 +1,40 @@ +{% extends 'base.html' %} + +{% load humanize %} +{% load staticfiles %} + +{% block title %} +Hlasování o přednáškách +{% endblock %} + +{% block content %} + +

+Jak moc by ses chtěl(a) zúčastnit následujících přednášek? +
+Obtížnost 1 je nejlehčí, 3 nejtěžší. +

+ +
+ {% csrf_token %} + {{form.as_table}} +
+ + {% for p in prednasky.prednaska_set.all %} + + + + + {% if p.klicova %}{% endif%} + + + {% endfor %} + +

{{p.anotace}}

{{p.obor}}
{{p.obtiznost}}
{{p.klicova}}
Hodnocení: + rozhodně nechci + je mi to jedno + rozhodně chci +
 
+
+ +{% endblock %} diff --git a/prednasky/templates/prednasky/hotovo.html b/prednasky/templates/prednasky/hotovo.html new file mode 100644 index 00000000..3e621b39 --- /dev/null +++ b/prednasky/templates/prednasky/hotovo.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} + +{% load humanize %} +{% load staticfiles %} + + +{% block content %} + +

Děkujeme.

+ +{% endblock %} diff --git a/prednasky/views.py b/prednasky/views.py index 91ea44a2..4d93397d 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -1,3 +1,37 @@ from django.shortcuts import render +from prednasky.forms import NewPrednaskyForm +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.objects.first() + # obsluha formulare umoznujiciho multiple nahravani fotek + if request.method == 'POST': + form = NewPrednaskyForm(request.POST, request.FILES) + if form.is_valid(): + jmeno = form.cleaned_data['ucastnik'] + for i in request.POST: + if i[0] == 'q': + hlasovani = Hlasovani() + hlasovani.prednaska = Prednaska.objects.filter(pk = i[1])[0] + hlasovani.body = int(request.POST[i]) + hlasovani.ucastnik = jmeno + hlasovani.save() + + # presmerovani na prave vzniklou galerii + return HttpResponseRedirect('./hotovo') + + else: + form = NewPrednaskyForm() + + return render(request, 'prednasky/Base.html', + { 'form' : form, + 'prednasky' : prednasky, + }) + +def Prednaska(request): + return render(request, 'prednasky/hotovo.html') + # Create your views here. diff --git a/seminar/urls.py b/seminar/urls.py index 968e5f02..ef28ae9d 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -3,10 +3,15 @@ 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 staff_member_required = user_passes_test(lambda u: u.is_staff) urlpatterns = [ + # prednasky + url(r'^prednasky/$', newPrednaska), + url(r'^prednasky/hotovo$', Prednaska), + url(r'^co-je-MaM/organizatori/$', views.CojemamOrganizatoriView.as_view(), name='organizatori'), url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'), From 70d8a187482d83c26f006f91f4fc270fc7b61e58 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Mon, 18 Apr 2016 01:27:05 +0200 Subject: [PATCH 3/4] prednasky | oprava ukladani --- prednasky/views.py | 5 +++-- seminar/urls.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 4d93397d..6f0fed53 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -14,7 +14,8 @@ def newPrednaska(request): for i in request.POST: if i[0] == 'q': hlasovani = Hlasovani() - hlasovani.prednaska = Prednaska.objects.filter(pk = i[1])[0] + print(i[1]) + hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1]))[0] hlasovani.body = int(request.POST[i]) hlasovani.ucastnik = jmeno hlasovani.save() @@ -30,7 +31,7 @@ def newPrednaska(request): 'prednasky' : prednasky, }) -def Prednaska(request): +def Prednaska_hotovo(request): return render(request, 'prednasky/hotovo.html') diff --git a/seminar/urls.py b/seminar/urls.py index ef28ae9d..545d0d02 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -3,14 +3,14 @@ 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 +from prednasky.views import newPrednaska, Prednaska_hotovo staff_member_required = user_passes_test(lambda u: u.is_staff) urlpatterns = [ # prednasky url(r'^prednasky/$', newPrednaska), - url(r'^prednasky/hotovo$', Prednaska), + url(r'^prednasky/hotovo$', Prednaska_hotovo), url(r'^co-je-MaM/organizatori/$', views.CojemamOrganizatoriView.as_view(), name='organizatori'), url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'), From 9ed60ef93f96fad984a2ec091a8737d56a71657f Mon Sep 17 00:00:00 2001 From: Tomas Jethro Pokorny Date: Mon, 18 Apr 2016 11:38:47 +0200 Subject: [PATCH 4/4] Bugfix. --- prednasky/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 6f0fed53..bcaa32f5 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -14,8 +14,8 @@ def newPrednaska(request): for i in request.POST: if i[0] == 'q': hlasovani = Hlasovani() - print(i[1]) - hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1]))[0] + print("q:"+i[1:]) + hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0] hlasovani.body = int(request.POST[i]) hlasovani.ucastnik = jmeno hlasovani.save()