From a1731ef157a786bd77724443923e7000dd4bddfa Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Mon, 10 Jun 2019 23:55:45 +0200 Subject: [PATCH] Opravy pro Django 2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zatím jen část. --- galerie/models.py | 8 ++-- korektury/models.py | 13 +++--- mamweb/settings_common.py | 2 +- mamweb/settings_local.py | 2 +- prednasky/models.py | 9 ++-- seminar/admin.py | 2 +- seminar/export.py | 2 +- seminar/models.py | 92 ++++++++++++++++++++++++--------------- seminar/views.py | 2 +- 9 files changed, 78 insertions(+), 54 deletions(-) diff --git a/galerie/models.py b/galerie/models.py index 4a90b131..9a582ccd 100644 --- a/galerie/models.py +++ b/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): diff --git a/korektury/models.py b/korektury/models.py index 553fa797..534677ed 100644 --- a/korektury/models.py +++ b/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') diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 6d171ca0..87d01f37 100644 --- a/mamweb/settings_common.py +++ b/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', diff --git a/mamweb/settings_local.py b/mamweb/settings_local.py index 885e2b9e..6941c9aa 100644 --- a/mamweb/settings_local.py +++ b/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', ) diff --git a/prednasky/models.py b/prednasky/models.py index 1cda462f..fe56a269 100644 --- a/prednasky/models.py +++ b/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, diff --git a/seminar/admin.py b/seminar/admin.py index 59eab849..01fd98ff 100644 --- a/seminar/admin.py +++ b/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 diff --git a/seminar/export.py b/seminar/export.py index 9b09d11f..0143101e 100644 --- a/seminar/export.py +++ b/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 diff --git a/seminar/models.py b/seminar/models.py index d94d1e3d..e7eff91e 100644 --- a/seminar/models.py +++ b/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) diff --git a/seminar/views.py b/seminar/views.py index 3f01376f..7a67cf82 100644 --- a/seminar/views.py +++ b/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 _