Browse Source

Opravy pro Django 2.0

Zatím jen část.
export_seznamu_prednasek
parent
commit
a1731ef157
  1. 8
      galerie/models.py
  2. 13
      korektury/models.py
  3. 2
      mamweb/settings_common.py
  4. 2
      mamweb/settings_local.py
  5. 9
      prednasky/models.py
  6. 2
      seminar/admin.py
  7. 2
      seminar/export.py
  8. 92
      seminar/models.py
  9. 2
      seminar/views.py

8
galerie/models.py

@ -57,7 +57,7 @@ class Obrazek(models.Model):
nazev = models.CharField('Název', max_length=50, blank=True, null=True)
popis = models.TextField('Popis', blank=True, null=True)
datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True)
galerie = models.ForeignKey('Galerie', blank=True, null=True)
galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL)
poradi = models.IntegerField('Pořadí', blank=True, null=True)
def __unicode__(self):
@ -88,8 +88,10 @@ class Galerie(models.Model):
popis = models.TextField('Popis', blank = True, null = True)
titulni_obrazek = models.ForeignKey(Obrazek, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL)
zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
galerie_up = models.ForeignKey('Galerie', blank = True, null = True)
soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True)
galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
on_delete=models.SET_NULL)
soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True,
on_delete=models.PROTECT)
poradi = models.IntegerField('Pořadí', blank = True, null = True)
def __unicode__(self):

13
korektury/models.py

@ -49,9 +49,8 @@ class KorekturovanePDF(models.Model):
pdf = models.FileField(u'PDF', upload_to = generate_filename)
org = models.ForeignKey(Organizator, blank=True,
help_text='Zodpovědný organizátor za obsah',
null=True,
default=None)
help_text='Zodpovědný organizátor za obsah',
null=True, default=None, on_delete=models.SET_NULL)
stran = models.IntegerField(u'počet stran', help_text='Počet stran PDF',
default=0)
@ -124,7 +123,7 @@ class Oprava(models.Model):
#Interní ID
id = models.AutoField(primary_key = True)
pdf = models.ForeignKey(KorekturovanePDF, default=-1)
pdf = models.ForeignKey(KorekturovanePDF, default=-1, on_delete=models.PROTECT)
strana = models.IntegerField(u'strana s opravou', help_text='Strana s opravou (od 0)')
@ -146,7 +145,7 @@ class Oprava(models.Model):
autor = models.ForeignKey(Organizator, blank = True,
help_text='Autor opravy',
null = True)
null = True, on_delete=models.SET_NULL)
text = models.TextField(u'text opravy',blank = True, help_text='Text opravy')
@ -173,10 +172,10 @@ class Komentar(models.Model):
cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře')
oprava = models.ForeignKey(Oprava)
oprava = models.ForeignKey(Oprava, on_delete=models.CASCADE)
autor = models.ForeignKey(Organizator, blank = True,
help_text = u'Autor komentáře',
null = True)
null = True, on_delete=models.SET_NULL)
text = models.TextField(u'text komentáře',blank = True, help_text='Text komentáře')

2
mamweb/settings_common.py

@ -52,7 +52,7 @@ AUTHENTICATION_BACKENDS = (
)
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'reversion.middleware.RevisionMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',

2
mamweb/settings_local.py

@ -10,7 +10,7 @@ import os.path
# Import common settings
from .settings_common import *
MIDDLEWARE_CLASSES += (
MIDDLEWARE += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)

9
prednasky/models.py

@ -25,7 +25,8 @@ class Seznam(models.Model):
ordering = ['soustredeni', 'stav']
id = models.AutoField(primary_key = True)
soustredeni = models.ForeignKey(Soustredeni,null = True, default = None)
soustredeni = models.ForeignKey(Soustredeni,null = True, default = None,
on_delete=models.PROTECT)
stav = models.IntegerField('Stav',choices=STAV_CHOICES,default = STAV_NAVRH)
def __str__(self):
@ -55,7 +56,7 @@ class Prednaska(models.Model):
id = models.AutoField(primary_key = True)
nazev = models.CharField('Název', max_length = 300)
org = models.ForeignKey(Organizator)
org = models.ForeignKey(Organizator, on_delete=models.PROTECT)
popis = models.TextField('Popis pro orgy',null = True, blank = True,help_text = 'Neveřejný popis pro ostatní orgy')
anotace = models.TextField('Anotace',null = True, blank = True, help_text = 'Veřejná anotace v hlasování')
obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST)
@ -75,10 +76,10 @@ class Hlasovani(models.Model):
verbose_name_plural = 'Hlasování'
ordering = ['ucastnik', 'prednaska']
id = models.AutoField(primary_key = True)
prednaska = models.ForeignKey(Prednaska)
prednaska = models.ForeignKey(Prednaska, on_delete=models.CASCADE)
body = models.IntegerField('Body', default = 0, choices = CHOICES_BODY)
ucastnik = models.CharField('Účastník', max_length = 100)
seznam = models.ForeignKey(Seznam)
seznam = models.ForeignKey(Seznam,null=True,on_delete=models.SET_NULL)
def __str__(self):
return force_unicode("{} dal {} bodů {} v seznamu {}".format(self.ucastnik,

2
seminar/admin.py

@ -9,7 +9,7 @@ from ckeditor_uploader.widgets import CKEditorUploadingWidget
from django.db.models import Count
from django.db import models
from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.contrib.auth.models import User

2
seminar/export.py

@ -1,7 +1,7 @@
import datetime, django
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.views import generic
from django.utils.encoding import force_text

92
seminar/models.py

@ -9,7 +9,7 @@ from django.conf import settings
from django.utils.encoding import python_2_unicode_compatible
from django.utils.encoding import force_text
from django.utils.text import slugify
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from django.utils.text import get_valid_filename
@ -64,7 +64,7 @@ class Osoba(SeminarModelBase):
# User, pokud má na webu účet
user = models.OneToOneField(settings.AUTH_USER_MODEL, blank=True, null=True,
verbose_name='uživatel')
verbose_name='uživatel', on_delete=models.DO_NOTHING)
# Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování)
pohlavi_muz = models.BooleanField('pohlaví (muž)', default=False)
@ -180,7 +180,7 @@ class Skola(SeminarModelBase):
help_text='Neveřejná poznámka ke škole (plain text)')
kontaktni_osoba = models.ForeignKey(Osoba, verbose_name='Kontaktní osoba',
blank=True, null=True)
blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
return '{}, {}, {}'.format(self.nazev, self.ulice, self.mesto)
@ -199,7 +199,8 @@ class Prijemce(SeminarModelBase):
help_text='Neveřejná poznámka k příemci čísel (plain text)')
osoba = models.OneToOneField(Osoba, verbose_name='komu', blank=False, null=False,
help_text='Které osobě či na jakou adresu se mají zasílat čísla')
help_text='Které osobě či na jakou adresu se mají zasílat čísla',
on_delete=models.CASCADE)
# FIXME: možná chceme něco jako vazbu na osobu XOR školu a počet kusů k zaslání
# FIXME: a možná taky posílání na mail a možná taky přes něj chceme posílat i řešitelům
@ -220,9 +221,12 @@ class Resitel(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
osoba = models.OneToOneField(Osoba, blank=False, null=True, verbose_name='osoba') # FIXME opravit po prvni migraci
osoba = models.OneToOneField(Osoba, blank=False, null=True, verbose_name='osoba',
on_delete=models.SET_NULL) # FIXME opravit po prvni migraci
skola = models.ForeignKey(Skola, blank=True, null=True, verbose_name='škola')
skola = models.ForeignKey(Skola, blank=True, null=True, verbose_name='škola',
on_delete=models.SET_NULL)
# Očekávaný rok maturity a vyřazení z aktivních řešitelů
rok_maturity = models.IntegerField('rok maturity', blank=True, null=True)
@ -378,7 +382,8 @@ class Cislo(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='cisla', db_index=True)
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='cisla',
db_index=True,on_delete=models.PROTECT)
cislo = models.CharField('název čísla', max_length=32, db_index=True,
help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určuje pořadí v ročníku!')
@ -456,7 +461,8 @@ class Organizator(SeminarModelBase):
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu
osoba = models.OneToOneField(Osoba, verbose_name='osoba', related_name='org',
help_text='osobní údaje organizátora', null=True, blank=False) #FIXME opravit po migraci
help_text='osobní údaje organizátora', null=True, blank=False,
on_delete=models.SET_NULL) #FIXME opravit po migraci
vytvoreno = models.DateTimeField(
'Vytvořeno',
@ -506,7 +512,8 @@ class Soustredeni(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='soustredeni')
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='soustredeni',
on_delete=models.PROTECT)
datum_zacatku = models.DateField('datum začátku', blank=True, null=True,
help_text='První den soustředění')
@ -575,7 +582,8 @@ class Problem(SeminarModelBase):
# Problém má podproblémy
nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém',
related_name='nadproblem_%(class)s', null=True, blank=True)
related_name='nadproblem_%(class)s', null=True, blank=True,
on_delete=models.SET_NULL)
STAV_NAVRH = 'navrh'
STAV_ZADANY = 'zadany'
@ -596,10 +604,12 @@ class Problem(SeminarModelBase):
help_text='Neveřejný návrh úlohy, návrh řešení, text zadání, poznámky ...')
autor = models.ForeignKey(Organizator, verbose_name='autor problému',
related_name='autor_problemu_%(class)s', null=True, blank=True)
related_name='autor_problemu_%(class)s', null=True, blank=True,
on_delete=models.SET_NULL)
garant = models.ForeignKey(Organizator, verbose_name='garant zadaného problému',
related_name='garant_problemu_%(class)s', null=True, blank=True)
related_name='garant_problemu_%(class)s', null=True, blank=True,
on_delete=models.SET_NULL)
opravovatele = models.ManyToManyField(Organizator, verbose_name='opravovatelé',
blank=True, related_name='opravovatele_%(class)s')
@ -662,7 +672,8 @@ class Tema(Problem):
tema_typ = models.CharField('Typ tématu', max_length=16, choices=TEMA_CHOICES,
blank=False, default=TEMA_TEMA)
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník',blank=True, null=True)
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník',blank=True, null=True,
on_delete=models.PROTECT)
def kod_v_rocniku(self):
if self.stav == 'zadany':
@ -677,7 +688,8 @@ class Clanek(Problem):
verbose_name = 'Článek'
verbose_name_plural = 'Články'
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True)
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True,
on_delete=models.PROTECT)
def kod_v_rocniku(self):
if self.stav == 'zadany':
# Nemělo by být potřeba
@ -708,14 +720,15 @@ class Uloha(Problem):
verbose_name_plural = 'Úlohy'
cislo_zadani = models.ForeignKey(Cislo, verbose_name='číslo zadání', blank=True,
null=True, related_name='zadane_ulohy')
null=True, related_name='zadane_ulohy', on_delete=models.PROTECT)
cislo_deadline = models.ForeignKey(Cislo, verbose_name='číslo deadlinu', blank=True,
null=True, related_name='deadlinove_ulohy')
null=True, related_name='deadlinove_ulohy', on_delete=models.PROTECT)
cislo_reseni = models.ForeignKey(Cislo, verbose_name='číslo řešení', blank=True,
null=True, related_name='resene_ulohy',
help_text='Číslo s řešením úlohy, jen pro úlohy')
help_text='Číslo s řešením úlohy, jen pro úlohy',
on_delete=models.PROTECT)
max_body = models.DecimalField(max_digits=8, decimal_places=1, verbose_name='maximum bodů',
blank=True, null=True)
@ -765,7 +778,8 @@ class Reseni(SeminarModelBase):
default=FORMA_EMAIL)
text_cely = models.OneToOneField(Text, verbose_name='Plná verze textu řešení',
blank=True, null=True, related_name="reseni_cely_set")
blank=True, null=True, related_name="reseni_cely_set",
on_delete=models.SET_NULL)
text_zkraceny = models.ManyToManyField(Text, verbose_name='zkrácené verze řešení',
help_text='Seznam úryvků z řešení',related_name="reseni_zkraceny_set")
@ -801,11 +815,11 @@ class Hodnoceni(SeminarModelBase):
blank=False, null=False)
cislo_body = models.ForeignKey(Cislo, verbose_name='číslo pro body',
related_name='hodnoceni', blank=False, null=False)
related_name='hodnoceni', blank=False, null=False, on_delete=models.PROTECT)
reseni = models.ForeignKey(Reseni, verbose_name='řešení')
reseni = models.ForeignKey(Reseni, verbose_name='řešení', on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, verbose_name='problém')
problem = models.ForeignKey(Problem, verbose_name='problém', on_delete=models.PROTECT)
def __str__(self):
return "{}, {}, {}".format(self.problem, self.reseni, self.body)
@ -856,7 +870,8 @@ class PrilohaReseni(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
reseni = models.ForeignKey(Reseni, verbose_name='řešení', related_name='prilohy')
reseni = models.ForeignKey(Reseni, verbose_name='řešení', related_name='prilohy',
on_delete=models.CASCADE)
vytvoreno = models.DateTimeField('vytvořeno', default=timezone.now, blank=True, editable=False)
@ -887,7 +902,8 @@ class Pohadka(SeminarModelBase):
# Při nahrávání z TeXu není vyplnění vyžadováno, v adminu je
null=True,
blank=False
blank=False,
on_delete=models.SET_NULL
)
vytvoreno = models.DateTimeField(
@ -915,9 +931,10 @@ class Soustredeni_Ucastnici(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
resitel = models.ForeignKey(Resitel, verbose_name='řešitel')
resitel = models.ForeignKey(Resitel, verbose_name='řešitel', on_delete=models.PROTECT)
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění')
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
on_delete=models.PROTECT)
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k účasti (plain text)')
@ -939,9 +956,11 @@ class Soustredeni_Organizatori(SeminarModelBase):
# Interní ID
id = models.AutoField(primary_key = True)
organizator = models.ForeignKey(Organizator, verbose_name='organizátor')
organizator = models.ForeignKey(Organizator, verbose_name='organizátor',
on_delete=models.PROTECT)
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění')
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
on_delete=models.PROTECT)
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k účasti organizátora (plain text)')
@ -1018,9 +1037,9 @@ class Reseni_Resitele(models.Model):
# Interní ID
id = models.AutoField(primary_key = True)
resitele = models.ForeignKey(Resitel, verbose_name='řešitel')
resitele = models.ForeignKey(Resitel, verbose_name='řešitel', on_delete=models.PROTECT)
reseni = models.ForeignKey(Reseni, verbose_name='řešení')
reseni = models.ForeignKey(Reseni, verbose_name='řešení', on_delete=models.CASCADE)
# podil - jakou merou se ktery resitel podilel na danem reseni
# - pouziti v budoucnu, pokud by resitele nemeli dostat vsichni stejne bodu za spolecne reseni
@ -1041,9 +1060,9 @@ class Konfery_Ucastnici(models.Model):
# Interní ID
id = models.AutoField(primary_key = True)
resitel = models.ForeignKey(Resitel, verbose_name='řešitel')
resitel = models.ForeignKey(Resitel, verbose_name='řešitel', on_delete=models.PROTECT)
konfera = models.ForeignKey(Konfera, verbose_name='konfera')
konfera = models.ForeignKey(Konfera, verbose_name='konfera', on_delete=models.CASCADE)
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k účasti (plain text)')
@ -1065,7 +1084,8 @@ class Obrazek(SeminarModelBase):
null=True, blank=True)
text = models.ForeignKey(Text, verbose_name='text',
help_text='text, ve kterém se obrázek vyskytuje', null=False, blank=False)
help_text='text, ve kterém se obrázek vyskytuje',
null=False, blank=False, on_delete=models.CASCADE)
do_cisla_barevny = models.FileField('barevný obrázek do čísla',
help_text = 'Barevná verze obrázku do čísla',
@ -1284,10 +1304,11 @@ class Nastaveni(SingletonModel):
db_table = 'seminar_nastaveni'
verbose_name = 'Nastavení semináře'
aktualni_rocnik = models.ForeignKey(Rocnik, verbose_name='aktuální ročník', null=False)
aktualni_rocnik = models.ForeignKey(Rocnik, verbose_name='aktuální ročník',
null=False, on_delete=models.PROTECT)
aktualni_cislo = models.ForeignKey(Cislo, verbose_name='poslední vydané číslo',
null=False)
null=False, on_delete=models.PROTECT)
def __str__(self):
return 'Nastavení semináře'
@ -1321,7 +1342,8 @@ class Novinky(models.Model):
],
options={'quality': 95})
autor = models.ForeignKey(Organizator, verbose_name='Autor novinky', null=True)
autor = models.ForeignKey(Organizator, verbose_name='Autor novinky', null=True,
on_delete=models.SET_NULL)
zverejneno = models.BooleanField('Zveřejněno', default=False)

2
seminar/views.py

@ -2,7 +2,7 @@
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, JsonResponse
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.views import generic
from django.utils.translation import ugettext as _

Loading…
Cancel
Save