Browse Source

Relink – post, asi done?

pull/47/head
Pavel "LEdoian" Turinsky 2 months ago
parent
commit
e3771f865d
  1. 20
      galerie/migrations/0012_soustredeni_relink.py
  2. 14
      galerie/migrations/0013_post_split_soustredeni.py
  3. 2
      galerie/models.py
  4. 20
      prednasky/migrations/0017_soustredeni_relink.py
  5. 14
      prednasky/migrations/0018_post_split_soustredeni.py
  6. 2
      prednasky/models.py
  7. 67
      seminar/migrations/0124_remove_sous_from_seminar.py
  8. 14
      seminar/migrations/0125_post_split_soustredeni.py
  9. 5
      seminar/models/__init__.py
  10. 231
      seminar/models/soustredeni.py
  11. 2
      soustredeni/admin.py
  12. 5
      soustredeni/migrations/0001_split_from_seminar.py
  13. 34
      soustredeni/migrations/0002_manage_soustredeni.py
  14. 13
      soustredeni/migrations/0003_post_split_soustredeni.py
  15. 5
      soustredeni/models.py
  16. 2
      split-apps-meta/create.notes

20
galerie/migrations/0012_soustredeni_relink.py

@ -0,0 +1,20 @@
# Generated by Django 4.2.11 on 2024-05-01 13:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('soustredeni', '0001_split_from_seminar'),
('galerie', '0011_pre_split_soustredeni'),
]
operations = [
migrations.AlterField(
model_name='galerie',
name='soustredeni',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='soustredeni.soustredeni'),
),
]

14
galerie/migrations/0013_post_split_soustredeni.py

@ -0,0 +1,14 @@
# Generated by Django 4.2.11 on 2024-05-01 13:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('galerie', '0012_soustredeni_relink'),
('soustredeni', '0003_post_split_soustredeni'),
]
operations = [
]

2
galerie/models.py

@ -7,7 +7,7 @@ from imagekit.processors import ResizeToFit, Transpose
import os
from seminar.models import Soustredeni
from soustredeni.models import Soustredeni
VZDY=0
ORG=1

20
prednasky/migrations/0017_soustredeni_relink.py

@ -0,0 +1,20 @@
# Generated by Django 4.2.11 on 2024-05-01 13:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('soustredeni', '0001_split_from_seminar'),
('prednasky', '0016_pre_split_soustredeni'),
]
operations = [
migrations.AlterField(
model_name='seznam',
name='soustredeni',
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='soustredeni.soustredeni'),
),
]

14
prednasky/migrations/0018_post_split_soustredeni.py

@ -0,0 +1,14 @@
# Generated by Django 4.2.11 on 2024-05-01 13:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0017_soustredeni_relink'),
('soustredeni', '0003_post_split_soustredeni'),
]
operations = [
]

2
prednasky/models.py

@ -2,7 +2,7 @@
from django.db import models
from seminar.models import Soustredeni
from soustredeni.models import Soustredeni
from personalni.models import Organizator
STAV_NAVRH = 1

67
seminar/migrations/0124_remove_sous_from_seminar.py

@ -0,0 +1,67 @@
# Generated by Django 4.2.11 on 2024-05-01 13:13
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('seminar', '0123_soustredeni_unmanage'),
('soustredeni', '0001_split_from_seminar'),
('galerie', '0012_soustredeni_relink'),
('prednasky', '0017_soustredeni_relink'),
]
operations = [
migrations.RemoveField(
model_name='konfery_ucastnici',
name='konfera',
),
migrations.RemoveField(
model_name='konfery_ucastnici',
name='resitel',
),
migrations.RemoveField(
model_name='soustredeni',
name='organizatori',
),
migrations.RemoveField(
model_name='soustredeni',
name='rocnik',
),
migrations.RemoveField(
model_name='soustredeni',
name='ucastnici',
),
migrations.RemoveField(
model_name='soustredeni_organizatori',
name='organizator',
),
migrations.RemoveField(
model_name='soustredeni_organizatori',
name='soustredeni',
),
migrations.RemoveField(
model_name='soustredeni_ucastnici',
name='resitel',
),
migrations.RemoveField(
model_name='soustredeni_ucastnici',
name='soustredeni',
),
migrations.DeleteModel(
name='Konfera',
),
migrations.DeleteModel(
name='Konfery_Ucastnici',
),
migrations.DeleteModel(
name='Soustredeni',
),
migrations.DeleteModel(
name='Soustredeni_Organizatori',
),
migrations.DeleteModel(
name='Soustredeni_Ucastnici',
),
]

14
seminar/migrations/0125_post_split_soustredeni.py

@ -0,0 +1,14 @@
# Generated by Django 4.2.11 on 2024-05-01 13:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('seminar', '0124_remove_sous_from_seminar'),
('soustredeni', '0003_post_split_soustredeni'),
]
operations = [
]

5
seminar/models/__init__.py

@ -1,10 +1,13 @@
from .tvorba import *
from .odevzdavatko import *
from .base import *
from .soustredeni import *
from .pomocne import *
from .treenode import *
from .novinky import *
from various.models import Nastaveni
from personalni.models import Organizator, Resitel, Skola, Prijemce, Osoba
from soustredeni.models import Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Konfera, Konfery_Ucastnici
# Kvůli migr. 0041
from soustredeni.models import generate_filename_konfera

231
seminar/models/soustredeni.py

@ -1,231 +0,0 @@
# -*- coding: utf-8 -*-
import logging
import os
from django.db import models
from django.urls import reverse
from reversion import revisions as reversion
from django.conf import settings
from personalni.models import Resitel, Organizator
from .base import SeminarModelBase
from seminar.models import tvorba as am
logger = logging.getLogger(__name__)
@reversion.register(ignore_duplicates=True)
class Soustredeni(SeminarModelBase):
class Meta:
managed = False
db_table = 'seminar_soustredeni'
verbose_name = 'Soustředění'
verbose_name_plural = 'Soustředění'
ordering = ['-rocnik__rocnik', '-datum_zacatku']
# Interní ID
id = models.AutoField(primary_key = True)
rocnik = models.ForeignKey(am.Rocnik, verbose_name='ročník', related_name='soustredeni_old',
on_delete=models.PROTECT)
datum_zacatku = models.DateField('datum začátku', blank=True, null=True,
help_text='První den soustředění')
datum_konce = models.DateField('datum konce', blank=True, null=True,
help_text='Poslední den soustředění')
verejne_db = models.BooleanField('soustředění zveřejněno', db_column='verejne', default=False)
misto = models.CharField('místo soustředění', max_length=256, blank=True, default='',
help_text='Místo (název obce, volitelně též objektu')
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci soustředění',
related_name='soustredeni_old',
help_text='Seznam účastníků soustředění', through='Soustredeni_Ucastnici')
organizatori = models.ManyToManyField(Organizator,
related_name='soustredeni_old',
verbose_name='Organizátoři soustředění',
help_text='Seznam organizátorů soustředění',
through='Soustredeni_Organizatori')
text = models.TextField('text k soustředění (HTML)', blank=True, default='')
TYP_JARNI = 'jarni'
TYP_PODZIMNI = 'podzimni'
TYP_VIKEND = 'vikend'
TYP_VYLET = 'vylet'
TYP_CHOICES = [
(TYP_JARNI, 'Jarní soustředění'),
(TYP_PODZIMNI, 'Podzimní soustředění'),
(TYP_VIKEND, 'Víkendový sraz'),
(TYP_VYLET, 'Výlet'),
]
typ = models.CharField('typ akce', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_PODZIMNI)
exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False,
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)')
def __str__(self):
return '{} ({})'.format(self.misto, self.datum_zacatku)
def verejne(self):
return self.verejne_db
verejne.boolean = True
def verejne_url(self):
#return reverse('seminar_soustredeni', kwargs={'pk': self.id})
return reverse('seminar_seznam_soustredeni')
@reversion.register(ignore_duplicates=True)
class Soustredeni_Ucastnici(SeminarModelBase):
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu
class Meta:
managed = False
db_table = 'seminar_soustredeni_ucastnici'
verbose_name = 'Účast na soustředění'
verbose_name_plural = 'Účasti na soustředění'
ordering = ['soustredeni', 'resitel']
# Interní ID
id = models.AutoField(primary_key = True)
resitel = models.ForeignKey(Resitel, verbose_name='řešitel',
related_name='sous_ucastnici',
on_delete=models.PROTECT)
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
related_name='sous_ucastnici',
on_delete=models.PROTECT)
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k účasti (plain text)')
def __str__(self):
return '{} na {}'.format(self.resitel, self.soustredeni)
# NOTE: Poteciální DB HOG bez select_related
@reversion.register(ignore_duplicates=True)
class Soustredeni_Organizatori(SeminarModelBase):
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu
class Meta:
managed = False
db_table = 'seminar_soustredeni_organizatori'
verbose_name = 'Účast organizátorů na soustředění'
verbose_name_plural = 'Účasti organizátorů na soustředění'
ordering = ['soustredeni', 'organizator']
# Interní ID
id = models.AutoField(primary_key = True)
organizator = models.ForeignKey(Organizator, verbose_name='organizátor',
related_name='sous_orgove',
on_delete=models.PROTECT)
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
related_name='sous_orgove',
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)')
def __str__(self):
return '{} na {}'.format(self.organizator, self.soustredeni)
# NOTE: Poteciální DB HOG bez select_related
# FIXME cycle import
# Django neumí jednoduše serializovat partial nebo třídu s __call__
# (https://docs.djangoproject.com/en/1.8/topics/migrations/),
# neprojdou pak migrace. Takže rozlišení funkcí generujících názvy souboru
# podle adresáře řešíme takto.
##
def generate_filename_konfera(self, filename):
return os.path.join(
settings.SEMINAR_KONFERY_DIR,
am.aux_generate_filename(self, filename)
)
##
@reversion.register(ignore_duplicates=True)
class Konfera(am.Problem):
class Meta:
managed = False
db_table = 'seminar_konfera'
verbose_name = 'Konfera'
verbose_name_plural = 'Konfery'
problem_ptr_old = models.OneToOneField(am.Problem, parent_link=True, related_name='konfera_old', on_delete=models.PROTECT, primary_key=True)
anotace = models.TextField('anotace', blank=True,
help_text='Popis, o čem bude konfera.')
abstrakt = models.TextField('abstrakt', blank=True,
help_text='Abstrakt konfery tak, jak byl uveden ve sborníku')
# FIXME: Umíme omezit jen na účastníky daného soustřeďka?
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery',
related_name='konfera_old',
help_text='Seznam účastníků konfery', through='Konfery_Ucastnici')
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',
related_name='konfery_old', on_delete = models.SET_NULL, null=True)
TYP_VELETRH = 'veletrh'
TYP_PREZENTACE = 'prezentace'
TYP_CHOICES = [
(TYP_VELETRH, 'Veletrh (postery)'),
(TYP_PREZENTACE, 'Prezentace (přednáška)'),
]
typ_prezentace = models.CharField('typ prezentace', max_length=16, choices=TYP_CHOICES,
blank=False, default=TYP_VELETRH)
prezentace = models.FileField('prezentace',help_text = 'Prezentace nebo fotka posteru',
upload_to = generate_filename_konfera, blank=True)
materialy = models.FileField('materialy',
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',
upload_to = generate_filename_konfera, blank=True)
def __str__(self):
return "{}: ({})".format(self.nazev, self.soustredeni)
def cislo_node(self):
return None
@reversion.register(ignore_duplicates=True)
class Konfery_Ucastnici(models.Model):
class Meta:
managed = False
db_table = 'seminar_konfery_ucastnici'
verbose_name = 'Účast na konfeře'
verbose_name_plural = 'Účasti na konfeře'
ordering = ['konfera', 'resitel']
# Interní ID
id = models.AutoField(primary_key = True)
resitel = models.ForeignKey(Resitel, verbose_name='řešitel', on_delete=models.PROTECT, related_name='konf_uc')
konfera = models.ForeignKey(Konfera, verbose_name='konfera', on_delete=models.CASCADE, related_name='konf_uc')
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k účasti (plain text)')
def __str__(self):
return '{} na {}'.format(self.resitel, self.konfera)
# NOTE: Poteciální DB HOG bez select_related

2
soustredeni/admin.py

@ -2,7 +2,7 @@ from django.contrib import admin
from django.forms import widgets
from django.db import models
from seminar.models import soustredeni as m
import soustredeni.models as m
class SoustredeniUcastniciInline(admin.TabularInline):

5
soustredeni/migrations/0001_split_from_seminar.py

@ -37,7 +37,8 @@ class Migration(migrations.Migration):
('typ_prezentace', models.CharField(choices=[('veletrh', 'Veletrh (postery)'), ('prezentace', 'Prezentace (přednáška)')], default='veletrh', max_length=16, verbose_name='typ prezentace')),
('prezentace', models.FileField(blank=True, help_text='Prezentace nebo fotka posteru', upload_to=soustredeni.models.generate_filename_konfera, verbose_name='prezentace')),
('materialy', models.FileField(blank=True, help_text='Další materiály ke konfeře zabalené do jednoho souboru', upload_to=soustredeni.models.generate_filename_konfera, verbose_name='materialy')),
('soustredeni', models.ForeignKey(to='soustredeni.soustredeni', verbose_name='soustředění', on_delete=models.PROTECT)),
('soustredeni', models.ForeignKey(to='soustredeni.soustredeni', verbose_name='soustředění', on_delete=models.SET_NULL, null=True, related_name='konfery')),
('ucastnici', models.ManyToManyField(help_text='Seznam účastníků konfery', through='soustredeni.Konfery_Ucastnici', to='personalni.resitel', verbose_name='účastníci konfery')),
],
options={
'verbose_name': 'Konfera',
@ -75,6 +76,8 @@ class Migration(migrations.Migration):
('typ', models.CharField(choices=[('jarni', 'Jarní soustředění'), ('podzimni', 'Podzimní soustředění'), ('vikend', 'Víkendový sraz'), ('vylet', 'Výlet')], default='podzimni', max_length=16, verbose_name='typ akce')),
('exportovat', models.BooleanField(db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)', verbose_name='export do AESOPa')),
('rocnik', models.ForeignKey(to='seminar.rocnik', verbose_name='ročník', related_name='soustredeni', on_delete=models.PROTECT)),
('organizatori', models.ManyToManyField(help_text='Seznam organizátorů soustředění', through='soustredeni.Soustredeni_Organizatori', to='personalni.organizator', verbose_name='Organizátoři soustředění')),
('ucastnici', models.ManyToManyField(help_text='Seznam účastníků soustředění', through='soustredeni.Soustredeni_Ucastnici', to='personalni.resitel', verbose_name='účastníci soustředění')),
],
options={
'verbose_name': 'Soustředění',

34
soustredeni/migrations/0002_manage_soustredeni.py

@ -0,0 +1,34 @@
# Generated by Django 4.2.11 on 2024-05-01 13:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('soustredeni', '0001_split_from_seminar'),
('seminar', '0124_remove_sous_from_seminar'),
]
operations = [
migrations.AlterModelOptions(
name='konfera',
options={'verbose_name': 'Konfera', 'verbose_name_plural': 'Konfery'},
),
migrations.AlterModelOptions(
name='konfery_ucastnici',
options={'ordering': ['konfera', 'resitel'], 'verbose_name': 'Účast na konfeře', 'verbose_name_plural': 'Účasti na konfeře'},
),
migrations.AlterModelOptions(
name='soustredeni',
options={'ordering': ['-rocnik__rocnik', '-datum_zacatku'], 'verbose_name': 'Soustředění', 'verbose_name_plural': 'Soustředění'},
),
migrations.AlterModelOptions(
name='soustredeni_organizatori',
options={'ordering': ['soustredeni', 'organizator'], 'verbose_name': 'Účast organizátorů na soustředění', 'verbose_name_plural': 'Účasti organizátorů na soustředění'},
),
migrations.AlterModelOptions(
name='soustredeni_ucastnici',
options={'ordering': ['soustredeni', 'resitel'], 'verbose_name': 'Účast na soustředění', 'verbose_name_plural': 'Účasti na soustředění'},
),
]

13
soustredeni/migrations/0003_post_split_soustredeni.py

@ -0,0 +1,13 @@
# Generated by Django 4.2.11 on 2024-05-01 13:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('soustredeni', '0002_manage_soustredeni'),
]
operations = [
]

5
soustredeni/models.py

@ -20,7 +20,6 @@ logger = logging.getLogger(__name__)
class Soustredeni(SeminarModelBase):
class Meta:
managed = False
db_table = 'seminar_soustredeni'
verbose_name = 'Soustředění'
verbose_name_plural = 'Soustředění'
@ -85,7 +84,6 @@ class Soustredeni_Ucastnici(SeminarModelBase):
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu
class Meta:
managed = False
db_table = 'seminar_soustredeni_ucastnici'
verbose_name = 'Účast na soustředění'
verbose_name_plural = 'Účasti na soustředění'
@ -112,7 +110,6 @@ class Soustredeni_Organizatori(SeminarModelBase):
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu
class Meta:
managed = False
db_table = 'seminar_soustredeni_organizatori'
verbose_name = 'Účast organizátorů na soustředění'
verbose_name_plural = 'Účasti organizátorů na soustředění'
@ -155,7 +152,6 @@ def generate_filename_konfera(self, filename):
@reversion.register(ignore_duplicates=True)
class Konfera(am.Problem):
class Meta:
managed = False
db_table = 'seminar_konfera'
verbose_name = 'Konfera'
verbose_name_plural = 'Konfery'
@ -200,7 +196,6 @@ class Konfera(am.Problem):
class Konfery_Ucastnici(models.Model):
class Meta:
managed = False
db_table = 'seminar_konfery_ucastnici'
verbose_name = 'Účast na konfeře'
verbose_name_plural = 'Účasti na konfeře'

2
split-apps-meta/create.notes

@ -3,5 +3,7 @@ Prostě zkopírovat vedle, s původními (=správnými) related names.
makemigrations
! Doplnit hack kolem content-types (jako první operace při migraci)
! Doplnit ForeignKeys (Vypadá to, že se dá vesměs zkopírovat předpis z models.py, jen místo prvního fieldu dát `to='app.model'. Dokonce asi funguje použít už novou aplikaci pro vazby v rámci aplikace.)
To samé s ManyToManyFieldy (through= musí taky být 'app.model')
(Zdá se, že jde dobastlit tuhle migraci polozpětně – doplnit co chybělo až podle toho, co vygeneruje migrace po zamanagování nového modelu.)
doplnit závislost na unmanage
migrate

Loading…
Cancel
Save