Veliké přejmenovávání [WIP]
Neříkám, že to funguje, ale říkám, že mi běží netriviální testy :-) Chybí: - migrace - přejmenovat templates
This commit is contained in:
parent
d06be4ccbd
commit
1f499a00a1
10 changed files with 181 additions and 30 deletions
|
|
@ -20,8 +20,8 @@ def obrazek_filename():
|
|||
def obrazek_filename_velky():
|
||||
pass
|
||||
|
||||
def galerie_filename(self, filename):
|
||||
gal = self.galerie
|
||||
def galerie_filename(soubor, filename):
|
||||
gal = soubor.galerie
|
||||
cislo_gal = gal.pk
|
||||
|
||||
# najdi kořenovou galerii
|
||||
|
|
@ -31,7 +31,7 @@ def galerie_filename(self, filename):
|
|||
cesta = (
|
||||
['Galerie'] +
|
||||
([f"soustredeni_{gal.soustredeni.pk}"] if gal.soustredeni else []) +
|
||||
[f"galerie_{cislo_gal}", self.nazev]
|
||||
[f"galerie_{cislo_gal}", soubor.nazev]
|
||||
)
|
||||
|
||||
return os.path.join(*cesta)
|
||||
|
|
@ -82,7 +82,7 @@ class Soubor(models.Model):
|
|||
case _: raise ValueError("Neznámý typ obrázku, bug v kódu!")
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('galerie_soubor', kwargs={'galerie': self.galerie.pk, 'soubor': self.pk})
|
||||
return reverse('galerie_soubor', kwargs={'soustredeni': top_galerie(self.galerie).soustredeni.id, 'galerie': self.galerie.pk, 'soubor': self.pk})
|
||||
|
||||
class Galerie(models.Model):
|
||||
class Viditelnost(models.IntegerChoices):
|
||||
|
|
@ -115,4 +115,4 @@ class Galerie(models.Model):
|
|||
ordering = ['nadgalerie__datum_vytvoreni', 'poradi', 'nazev']
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('galerie_galerie', kwargs={'galerie': self.pk})
|
||||
return reverse('galerie_galerie', kwargs={'soustredeni': top_galerie(self).soustredeni.id, 'galerie': self.pk})
|
||||
|
|
|
|||
|
|
@ -21,17 +21,17 @@
|
|||
{% if predchozi_obrazek %}
|
||||
// doleva
|
||||
if (e.which == 37) {
|
||||
window.location.assign("{% url 'galerie_soubor' galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru");
|
||||
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru");
|
||||
}
|
||||
{% endif %}
|
||||
{% if dalsi_obrazek %}
|
||||
// doprava
|
||||
if (e.which == 39) {
|
||||
window.location.assign("{% url 'galerie_soubor' galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru");
|
||||
window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru");
|
||||
}
|
||||
{% endif %}
|
||||
if (e.which == 27) {
|
||||
window.location.assign("{% url 'galerie_galerie' galerie=galerie.pk %}#obsah");
|
||||
window.location.assign("{% url 'galerie_galerie' soustredeni=soustredeni.id galerie=galerie.pk %}#obsah");
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
|
||||
<h2>
|
||||
{% for g in cesta %}
|
||||
<a href="{% url 'galerie_galerie' galerie=g.pk %}">{{ g.nazev }}</a>{% if not forloop.last %} >{% endif %}
|
||||
<a href="{% url 'galerie_galerie' soustredeni=soustredeni.id galerie=g.pk %}">{{ g.nazev }}</a>{% if not forloop.last %} >{% endif %}
|
||||
{% endfor %}
|
||||
</h2>
|
||||
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
{% if obrazky_predchozi %}
|
||||
{% with obrazky_predchozi|last as predchozi_obrazek %}
|
||||
<div>
|
||||
<a title="Předchozí" class="predchozi_obrazek" href="{% url 'galeie_soubor' galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru"></a>
|
||||
<a title="Předchozí" class="predchozi_obrazek" href="{% url 'galeie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru"></a>
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endif%}
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
{% if obrazky_dalsi %}
|
||||
{% with obrazky_dalsi|first as dalsi_obrazek %}
|
||||
<div>
|
||||
<a title="Další" class="dalsi_obrazek" href="{% url 'galerie_soubor' galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru"></a>
|
||||
<a title="Další" class="dalsi_obrazek" href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=dalsi_obrazek.pk %}#nahoru"></a>
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endif%}
|
||||
|
|
@ -101,24 +101,24 @@
|
|||
{# odkaz na predchozi galerii #}
|
||||
<div class="navigace">
|
||||
{% if predchozi_galerie %}
|
||||
Předchozí: <a href="{% url 'galerie_soubor' galerie=predchozi_galerie.pk soubor=predchozi_galerie.obrazek_set.last.pk %}#nahoru">
|
||||
Předchozí: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=predchozi_galerie.pk soubor=predchozi_galerie.obrazek_set.last.pk %}#nahoru">
|
||||
{{predchozi_galerie}}
|
||||
</a>
|
||||
{% endif %}
|
||||
{# nahledy predchozich obrazku #}
|
||||
{% for obrazek in obrazky_predchozi %}
|
||||
<a href="{% url 'galerie_soubor' galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
|
||||
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
|
||||
{% endfor %}
|
||||
|
||||
{% zmenseny_nahled obrazek.jako_bazmek alt=obrazek.popisek class="obrazek" id="prostredni" %}
|
||||
|
||||
{# nahledy nasledujicich obrazku #}
|
||||
{% for obrazek in obrazky_dalsi %}
|
||||
<a href="{% url 'galerie_soubor' galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
|
||||
<a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=obrazek.pk %}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>
|
||||
{% endfor %}
|
||||
{# odkaz na nasledujici galerii #}
|
||||
{% if nasledujici_galerie %}
|
||||
Následující: <a href="{% url 'galerie_soubor' galerie=nasledujici_galerie.pk soubor=nasledujici_galerie.obrazek_set.first.pk %}#nahoru">
|
||||
Následující: <a href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=nasledujici_galerie.pk soubor=nasledujici_galerie.obrazek_set.first.pk %}#nahoru">
|
||||
{{nasledujici_galerie}}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Galerie popisekgalerie.nazev}}
|
|||
<h2>
|
||||
{% for g in cesta %}
|
||||
{% if not forloop.last %}
|
||||
<a href="{% url 'galerie_galerie galerie=g.pk %}">{{ g.nazev }}</a> >
|
||||
<a href="{% url 'galerie_galerie' galerie=g.pk soustredeni=soustredeni.id %}">{{ g.nazev }}</a> >
|
||||
{% else %}
|
||||
{{ g.nazev }}
|
||||
{% endif %}
|
||||
|
|
@ -39,7 +39,7 @@ Galerie popisekgalerie.nazev}}
|
|||
{% if sourozenci|length > 1 %}
|
||||
{% for g in sourozenci %}
|
||||
{% if g.pk != galerie.pk %}
|
||||
<a href="{% url 'galerie_galerie' galerie=g.pk %}">{{ g.nazev }}</a>
|
||||
<a href="{% url 'galerie_galerie' galerie=g.pk soustredeni=soustredeni.id %}">{{ g.nazev }}</a>
|
||||
{% else %}
|
||||
{{ g.nazev }}
|
||||
{% endif %}
|
||||
|
|
@ -51,7 +51,7 @@ Galerie popisekgalerie.nazev}}
|
|||
{% with 22 as max_delka_nazvu %}
|
||||
<div class="galerie_nahledy">
|
||||
{% for pgalerie in podgalerie %}
|
||||
<a href="{% url 'galerie_galerie' galerie=pgalerie.pk %}"
|
||||
<a href="{% url 'galerie_galerie' soustredeni=soustredeni.id galerie=pgalerie.pk %}"
|
||||
{% if pgalerie.nazev|length > max_delka_nazvu %}
|
||||
title="{{ pgalerie.nazev }}"
|
||||
{% endif %}
|
||||
|
|
@ -67,8 +67,8 @@ Galerie popisekgalerie.nazev}}
|
|||
{% if user.je_org %}
|
||||
<div class="mam-org-only-galerie">
|
||||
({{pgalerie.poradi}})
|
||||
<span class="plus"><a href="{% url 'galerie_doprava' galerie=galerie.pk subgalerie=pgalerie.pk %}">+</a></span>
|
||||
<span class="minus"><a href="{% url 'galerie_doleva' galerie=galerie.pk subgalerie=pgalerie.pk %}">-</a></span>
|
||||
<span class="plus"><a href="{% url 'galerie_doprava' galerie=galerie.pk subgalerie=pgalerie.pk soustredeni=soustredeni.id %}">+</a></span>
|
||||
<span class="minus"><a href="{% url 'galerie_doleva' galerie=galerie.pk subgalerie=pgalerie.pk soustredeni=soustredeni.id %}">-</a></span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
|
@ -80,7 +80,7 @@ Galerie popisekgalerie.nazev}}
|
|||
{% if user.je_org %}
|
||||
<div class="mam-org-only">
|
||||
{% if galerie.zobrazit == 1 %}
|
||||
<a href="{% url 'galerie_nova' galerie=galerie.pk %}">Vytvořit novou podgalerii</a>, <a href="{% url 'admin:galerie_galerie_change' galerie.pk %}">upravit galerii v adminu</a>
|
||||
<a href="{% url 'galerie_nova' galerie=galerie.pk soustredeni=soustredeni.id %}">Vytvořit novou podgalerii</a>, <a href="{% url 'admin:galerie_galerie_change' galerie.pk %}">upravit galerii v adminu</a>
|
||||
{% else %}
|
||||
Jestli chceš změnit pořadí podgalerií nebo přidat novou, nastav zobrazení jen pro orgy v <a href="{% url 'admin:galerie_galerie_change' galerie.pk %}">adminu</a>.
|
||||
{% endif %}
|
||||
|
|
@ -95,7 +95,7 @@ Galerie popisekgalerie.nazev}}
|
|||
{% if obrazek.popisek %}
|
||||
title="{{ obrazek.popisek }}"
|
||||
{% endif %}
|
||||
href="{% url 'galerie_soubor' galerie=galerie.pk soubor=obrazek.pk %}#nahoru" class="galerie_nahled">
|
||||
href="{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=obrazek.pk %}#nahoru" class="galerie_nahled">
|
||||
<span class="vystredeno"></span>
|
||||
{% zmenseny_nahled obrazek.jako_bazmek %}
|
||||
{# title=obrazek.popisek (a byl tu if, že se použil jen když existoval…) width=obrazek.obrazek_maly.width height=obrazek.obrazek_maly.height #}
|
||||
|
|
@ -107,12 +107,12 @@ Galerie popisekgalerie.nazev}}
|
|||
<div class="galerie_predchozi_nasledujici">
|
||||
{% if predchozi %}
|
||||
<div class="predchozi">
|
||||
<a href="{% url 'galerie_galerie' galerie=predchozi.pk %}">Předchozí: {{ predchozi.nazev }}</a>
|
||||
<a href="{% url 'galerie_galerie' soustredeni=soustredeni.id galerie=predchozi.pk %}">Předchozí: {{ predchozi.nazev }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if nasledujici %}
|
||||
<div class="nasledujici">
|
||||
<a href="{% url 'galerie_galerie' galerie=nasledujici.pk %}">Následující: {{ nasledujici.nazev }}</a>
|
||||
<a href="{% url 'galerie_galerie' soustredeni=soustredeni.id galerie=nasledujici.pk %}">Následující: {{ nasledujici.nazev }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
|||
BIN
galerie/testfiles/bila.mp4
Normal file
BIN
galerie/testfiles/bila.mp4
Normal file
Binary file not shown.
BIN
galerie/testfiles/kod_emoji.jpg
Normal file
BIN
galerie/testfiles/kod_emoji.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 111 KiB |
BIN
galerie/testfiles/metal.jpg
Normal file
BIN
galerie/testfiles/metal.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 347 KiB |
BIN
galerie/testfiles/ohno_small.jpg
Normal file
BIN
galerie/testfiles/ohno_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
BIN
galerie/testfiles/pf2020_small.jpg
Normal file
BIN
galerie/testfiles/pf2020_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 289 KiB |
140
galerie/tests.py
Normal file
140
galerie/tests.py
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase, Client, override_settings
|
||||
from django.urls import reverse
|
||||
from galerie.models import Galerie, Soubor
|
||||
from soustredeni.models import Soustredeni
|
||||
|
||||
import django.contrib.auth.models as auth
|
||||
import personalni.models as pers
|
||||
import tvorba.models as tv
|
||||
|
||||
from contextlib import ExitStack
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
# NOTE: Existují metody, jak si pořídit kontext: https://docs.python.org/3/library/unittest.html#unittest.TestCase.enterClassContext
|
||||
# Nepoužíváme je, protože jsem nepřišlo na to, jak je pak použít v `@override_settings(MEDIA_ROOT=media_dir)`
|
||||
# Ref: https://stackoverflow.com/a/2269295
|
||||
tempdir = tempfile.TemporaryDirectory(prefix='mamweb_test')
|
||||
media_dir = Path(tempdir.name) / 'media'
|
||||
|
||||
class GalerieTests(TestCase):
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
org_perm = auth.Permission.objects.get(content_type=ContentType.objects.get_for_model(auth.User), codename='org')
|
||||
resitel_perm = auth.Permission.objects.get(content_type=ContentType.objects.get_for_model(auth.User), codename='resitel')
|
||||
|
||||
r = tv.Rocnik.objects.create(rocnik=42, prvni_rok=1970)
|
||||
cls.sous_a = Soustredeni.objects.create(rocnik=r)
|
||||
cls.sous_b = Soustredeni.objects.create(rocnik=r)
|
||||
|
||||
cls.neucastnik = pers.Resitel.objects.create(osoba=pers.Osoba.objects.create(user=auth.User.objects.create_user(username='ne')))
|
||||
cls.neucastnik.osoba.user.user_permissions.add(resitel_perm)
|
||||
|
||||
cls.ucastnik_a = pers.Resitel.objects.create(osoba=pers.Osoba.objects.create(user=auth.User.objects.create_user(username='ua')))
|
||||
cls.ucastnik_a.osoba.user.user_permissions.add(resitel_perm)
|
||||
cls.sous_a.ucastnici.add(cls.ucastnik_a)
|
||||
|
||||
cls.ucastnik_b = pers.Resitel.objects.create(osoba=pers.Osoba.objects.create(user=auth.User.objects.create_user(username='ub')))
|
||||
cls.ucastnik_b.osoba.user.user_permissions.add(resitel_perm)
|
||||
cls.sous_b.ucastnici.add(cls.ucastnik_b)
|
||||
|
||||
cls.org = pers.Organizator.objects.create(osoba=pers.Osoba.objects.create(user=auth.User.objects.create_user(username='o', is_staff=True)))
|
||||
cls.org.osoba.user.user_permissions.add(org_perm)
|
||||
|
||||
def setUp(self):
|
||||
media_dir.mkdir()
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(media_dir)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
super().tearDownClass()
|
||||
tempdir.cleanup()
|
||||
|
||||
# TODO: tohle není moc unit test. Správnější by bylo mít polopřipravené
|
||||
# věci (sous s galerií, sous bez galerie, sous se špatně uspořádanými
|
||||
# galeriemi ap.) a dedikované testy na jednotlivé úkony. Ale teď jsem to
|
||||
# začalo psát takhle a chci to nejdřív dopsat a commitnout, takže pokud to
|
||||
# zapomenu rozstřelit na menší, tak to takhle zůstane…
|
||||
@override_settings(MEDIA_ROOT=media_dir)
|
||||
def test_vyrobeni_galerii_k_sousu(self):
|
||||
"""Vyrobí strukturu galerií odpovídající sousové běžné struktuře pomocí příslušných views"""
|
||||
org_client = Client()
|
||||
org_client.force_login(self.org.osoba.user)
|
||||
resp = org_client.get(reverse('galerie_nova', kwargs={'soustredeni': self.sous_a.id, 'galerie': 0}))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
tf = Path(settings.BASE_DIR) / 'galerie' / 'testfiles'
|
||||
filenames_pa = [
|
||||
tf / 'kod_emoji.jpg',
|
||||
tf / 'metal.jpg',
|
||||
tf / 'ohno_small.jpg',
|
||||
]
|
||||
filenames_so = [
|
||||
tf / 'pf2020_small.jpg',
|
||||
]
|
||||
resp = org_client.post(
|
||||
reverse('galerie_nova', kwargs={'soustredeni': self.sous_a.id, 'galerie': 0}),
|
||||
data={'nazev': 'Top galerie k sousu A'},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
# Teď je kind-of těžké kliknout na „přidat novou podgalerii“, protože ten odkaz je někde v HTML vyrenderovaný templatem.
|
||||
# Ale můžeme vytáhnout pk galerie z kontextu
|
||||
top_gal = resp.context['galerie']
|
||||
self.assertIsInstance(top_gal, Galerie)
|
||||
|
||||
# Záměrně vyrobíme nejdřív sobotní a pak páteční galerii, ať je pak můžeme prohodit
|
||||
with ExitStack() as stack:
|
||||
files = [stack.enter_context(open(fn, 'rb')) for fn in filenames_so]
|
||||
resp = org_client.post(
|
||||
reverse('galerie_nova', kwargs={'soustredeni': self.sous_a.id, 'galerie': top_gal.pk}),
|
||||
data={'nazev': 'Sobota', 'obr': files},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
so_gal = resp.context['galerie']
|
||||
self.assertIsInstance(so_gal, Galerie)
|
||||
|
||||
with ExitStack() as stack:
|
||||
files = [stack.enter_context(open(fn, 'rb')) for fn in filenames_pa]
|
||||
resp = org_client.post(
|
||||
reverse('galerie_nova', kwargs={'soustredeni': self.sous_a.id, 'galerie': top_gal.pk}),
|
||||
data={'nazev': 'Pátek', 'obr': files},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
pa_gal = resp.context['galerie']
|
||||
self.assertIsInstance(pa_gal, Galerie)
|
||||
|
||||
self.assertGreater(pa_gal.poradi, so_gal.poradi)
|
||||
# Dokonce i tušíme, jaká ta pořadí jsou
|
||||
# NOTE: pokud tohle začne failovat, tak je asi safe to smazat.
|
||||
self.assertEqual(pa_gal.poradi, 2)
|
||||
self.assertEqual(so_gal.poradi, 1)
|
||||
|
||||
# Teď je prohodíme:
|
||||
# NOTE: použití metody PATCH by tady prošlo, protože nekontrolujeme,
|
||||
# jaká metoda se používá. Ale dokud simulujeme orga na webu s odkazy
|
||||
# (`<a>`), tak použijeme GET.
|
||||
resp = org_client.get(
|
||||
reverse('galerie_doleva', kwargs={'soustredeni': self.sous_a.id, 'galerie': top_gal.pk, 'subgalerie': pa_gal.pk}),
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
resp = org_client.get(
|
||||
reverse('galerie_doprava', kwargs={'soustredeni': self.sous_a.id, 'galerie': top_gal.pk, 'subgalerie': so_gal.pk}),
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
# Změnil se stav
|
||||
pa_gal.refresh_from_db()
|
||||
so_gal.refresh_from_db()
|
||||
|
||||
self.assertLess(pa_gal.poradi, so_gal.poradi)
|
||||
self.assertEqual(pa_gal.poradi, 1)
|
||||
self.assertEqual(so_gal.poradi, 2)
|
||||
|
||||
|
|
@ -90,6 +90,7 @@ def galerieView(request, soustredeni:int, galerie: int):
|
|||
'sourozenci': sourozenci,
|
||||
'predchozi': predchozi,
|
||||
'nasledujici': nasledujici,
|
||||
'soustredeni': soustredeni, # Jen kvůli reverse urls…
|
||||
'object': galerie,
|
||||
})
|
||||
|
||||
|
|
@ -107,6 +108,9 @@ def souborView(request, soustredeni: int, galerie: int, soubor: int):
|
|||
# Explicitní pořadí ničemu neuškodí :-)
|
||||
soubory = galerie.soubor_set.all().order_by('poradi', 'nazev')
|
||||
soubory = list(soubory)
|
||||
# Pokud někdo umí z DB rovnou vytáhnout příslušnou sadu obrázků, tak to
|
||||
# bude (teoreticky a asymptoticky) hezčí. Ale pokud neplánujeme mít tisíce
|
||||
# obrázků v jedné galerii, tak je to asi jedno :-D
|
||||
index_souboru = soubory.index(soubor)
|
||||
# Podle mě se nemůže stát, že by volání výš selhalo, kdyžtak shodí web. (původně to byl explicitně ošetřený stav dávající 404)
|
||||
predchozi_soubory = list(reversed(soubor[:index_souboru]))
|
||||
|
|
@ -172,7 +176,8 @@ def new_galerie(request, galerie: int, soustredeni: int):
|
|||
|
||||
# obsluha formulare umoznujiciho multiple nahravani fotek
|
||||
if request.method == 'POST':
|
||||
form = NewGalerieForm(request.POST, request.FILES)
|
||||
# Tohle je nějaké zbastlené. NewGalerieForm nežere FILES, ručně zpracováváme ``request.FILES.getlist('obr')``. FIXME.
|
||||
form = NewGalerieForm(request.POST)
|
||||
if form.is_valid():
|
||||
# vytvoreni nove galerie
|
||||
gal = Galerie()
|
||||
|
|
@ -187,7 +192,7 @@ def new_galerie(request, galerie: int, soustredeni: int):
|
|||
else:
|
||||
gal.soustredeni = soustredeni
|
||||
if gal.nadgalerie:
|
||||
gal.poradi = int(len(gal.nadgalerie.galerie_set.all())) + 1
|
||||
gal.poradi = int(len(gal.nadgalerie.podgalerie.all())) + 1
|
||||
gal.save()
|
||||
|
||||
# zpracovani souboru v galerii
|
||||
|
|
@ -201,7 +206,7 @@ def new_galerie(request, galerie: int, soustredeni: int):
|
|||
o.save()
|
||||
|
||||
# presmerovani na prave vzniklou galerii
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': gal.pk}))
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': gal.pk, 'soustredeni': soustredeni.id}))
|
||||
|
||||
else:
|
||||
form = NewGalerieForm()
|
||||
|
|
@ -213,22 +218,28 @@ def new_galerie(request, galerie: int, soustredeni: int):
|
|||
'galerie_text' : galerie_text,
|
||||
})
|
||||
|
||||
# FIXME: Tohle by neměly být GETy, ale POSTy/PATCHe, protože mění stav
|
||||
# (= nejsou safe) a nejsou idempotentní. Ale znamená to mít místo odkazů
|
||||
# `<button>`y / JS, což se nikomu nechce…
|
||||
# Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods
|
||||
def galerie_doprava(request, soustredeni: int, galerie: int, subgalerie: int):
|
||||
subgalerie: Galerie = get_object_or_404(Galerie, pk=subgalerie)
|
||||
assert top_galerie(subgalerie).soustredeni.id == soustredeni
|
||||
assert subgalerie.nadgalerie.pk == galerie
|
||||
if subgalerie.poradi:
|
||||
subgalerie.poradi += 1
|
||||
else:
|
||||
subgalerie.poradi = int(len(subgalerie.nadgalerie.galerie_set.all()))
|
||||
subgalerie.poradi = int(len(subgalerie.nadgalerie.podgalerie.all()))
|
||||
subgalerie.save()
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': galerie}))
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': galerie, 'soustredeni': soustredeni}))
|
||||
|
||||
def galerie_doleva(request, soustredeni: int, galerie: int, subgalerie: int):
|
||||
subgalerie: Galerie = get_object_or_404(Galerie, pk=subgalerie)
|
||||
assert top_galerie(subgalerie).soustredeni.id == soustredeni
|
||||
assert subgalerie.nadgalerie.pk == galerie
|
||||
if subgalerie.poradi:
|
||||
subgalerie.poradi -= 1
|
||||
else:
|
||||
subgalerie.poradi = 1
|
||||
subgalerie.save()
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': galerie}))
|
||||
return HttpResponseRedirect(reverse('galerie_galerie', kwargs={'galerie': galerie, 'soustredeni': soustredeni}))
|
||||
|
|
|
|||
Loading…
Reference in a new issue