Galerie: Obrázek přejmenován na Soubor

This commit is contained in:
Pavel "LEdoian" Turinsky 2025-11-18 18:42:27 +01:00
parent d07d4daf04
commit 3e18f51550
4 changed files with 18 additions and 18 deletions

View file

@ -1,4 +1,4 @@
from galerie.models import Obrazek, Galerie, VZDY, ORG, NIKDY, UCASTNIK from galerie.models import Soubor, Galerie, VZDY, ORG, NIKDY, UCASTNIK
from django.contrib import admin from django.contrib import admin
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django import forms from django import forms
@ -29,14 +29,14 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset):
'Přepnout do režimu úprav (zneveřejní galerii)' 'Přepnout do režimu úprav (zneveřejní galerii)'
class GalerieInline(admin.TabularInline): class GalerieInline(admin.TabularInline):
model = Obrazek model = Soubor
fields = ['soubor', 'nazev', 'popis', 'typ', 'poradi'] fields = ['soubor', 'nazev', 'popis', 'typ', 'poradi']
readonly_fields = ['nazev'] readonly_fields = ['nazev']
formfield_overrides = { formfield_overrides = {
models.TextField: {'widget': forms.TextInput}, models.TextField: {'widget': forms.TextInput},
} }
class ObrazekAdmin(admin.ModelAdmin): class SouborAdmin(admin.ModelAdmin):
list_display = ('soubor', 'nazev', 'popis', 'poradi') list_display = ('soubor', 'nazev', 'popis', 'poradi')
search_fields = ['nazev','popis'] search_fields = ['nazev','popis']
@ -50,5 +50,5 @@ class GalerieAdmin(admin.ModelAdmin):
save_on_top = True save_on_top = True
ordering = ['galerie_up__nazev', 'poradi'] ordering = ['galerie_up__nazev', 'poradi']
admin.site.register(Obrazek, ObrazekAdmin) admin.site.register(Soubor, SouborAdmin)
admin.site.register(Galerie, GalerieAdmin) admin.site.register(Galerie, GalerieAdmin)

View file

@ -46,8 +46,7 @@ def galerie_filename(self, filename):
return os.path.join(*cesta) return os.path.join(*cesta)
# Technicky misnomer: takový `Obrazek` může být i videjko a výhledově i něco dalšího… class Soubor(models.Model):
class Obrazek(models.Model):
# „originál“ (modulo max. velikost uploadu na web FIXME!) # „originál“ (modulo max. velikost uploadu na web FIXME!)
soubor = models.FileField(upload_to=galerie_filename, soubor = models.FileField(upload_to=galerie_filename,
help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.") help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.")
@ -71,6 +70,7 @@ class Obrazek(models.Model):
class Meta: class Meta:
verbose_name = 'Obrázek' verbose_name = 'Obrázek'
verbose_name_plural = 'Obrázky' verbose_name_plural = 'Obrázky'
db_table = 'galerie_obrazek' # FIXME: přejmenovat
ordering = ['nazev'] #FIXME: zohlednit pořadí a asi i příslušnost ke galerii ordering = ['nazev'] #FIXME: zohlednit pořadí a asi i příslušnost ke galerii
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -78,7 +78,7 @@ class Obrazek(models.Model):
# (a pak se podle něj taky řadí) # (a pak se podle něj taky řadí)
if self.nazev is None: if self.nazev is None:
self.nazev = os.path.basename(self.soubor.name) self.nazev = os.path.basename(self.soubor.name)
super(Obrazek, self).save(*args, **kwargs) super().save(*args, **kwargs)
def jako_bazmek(self): def jako_bazmek(self):
""" """
@ -97,7 +97,7 @@ class Galerie(models.Model):
datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True) datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True)
datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True) datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True)
popis = models.TextField('Popis', blank = True, null = True) popis = models.TextField('Popis', blank = True, null = True)
titulni_obrazek = models.ForeignKey(Obrazek, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL) titulni_obrazek = models.ForeignKey(Soubor, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL)
zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST) zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
galerie_up = models.ForeignKey('Galerie', blank = True, null = True, galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
on_delete=models.PROTECT) on_delete=models.PROTECT)

View file

@ -25,7 +25,7 @@ from imagekit.processors import ResizeToFit, Transpose
HTML = str | SafeString HTML = str | SafeString
from galerie.models import Obrazek as DbObrazek from galerie.models import Soubor
class ZobrazitelnyBazmek(abc.ABC): class ZobrazitelnyBazmek(abc.ABC):
def __init__(self, db_objekt): def __init__(self, db_objekt):
@ -128,13 +128,13 @@ class DummyBazmek(ZobrazitelnyBazmek):
attrs = _fmt_attrs(kwargs) attrs = _fmt_attrs(kwargs)
return format_html(r'<img src="{}" {} />', self.placeholder, attrs) return format_html(r'<img src="{}" {} />', self.placeholder, attrs)
def tipniTyp(soubor) -> DbObrazek.Typ: def tipniTyp(soubor) -> Soubor.Typ:
from PIL import Image, UnidentifiedImageError from PIL import Image, UnidentifiedImageError
try: try:
Image.open(soubor) Image.open(soubor)
return DbObrazek.Typ.OBRAZEK return Soubor.Typ.OBRAZEK
except UnidentifiedImageError: except UnidentifiedImageError:
return DbObrazek.Typ.NEVIM return Soubor.Typ.NEVIM
logger.warning("Nepodařilo se tipnout typ nečekaným způsobem!") logger.warning("Nepodařilo se tipnout typ nečekaným způsobem!")
return DbObrazek.Typ.NEVIM return Soubor.Typ.NEVIM

View file

@ -8,7 +8,7 @@ from datetime import datetime
from galerie.utils import top_galerie from galerie.utils import top_galerie
from personalni.utils import resitel_uzivatele from personalni.utils import resitel_uzivatele
from galerie.models import Obrazek, Galerie, VZDY, ORG, UCASTNIK, NIKDY from galerie.models import Soubor, Galerie, VZDY, ORG, UCASTNIK, NIKDY
from soustredeni.models import Soustredeni from soustredeni.models import Soustredeni
from galerie.forms import KomentarForm, NewGalerieForm from galerie.forms import KomentarForm, NewGalerieForm
@ -56,7 +56,7 @@ def nahled(request, pk, soustredeni):
podgalerie = Galerie.objects.filter(galerie_up = galerie).order_by('poradi') podgalerie = Galerie.objects.filter(galerie_up = galerie).order_by('poradi')
podgalerie = podgalerie.filter(zobrazit__in=galerie_ke_zobrazeni(soustredeni, request)) podgalerie = podgalerie.filter(zobrazit__in=galerie_ke_zobrazeni(soustredeni, request))
obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev') obrazky = galerie.soubor_set.all().order_by('poradi', 'nazev')
ma_se_zobrazit = zobrazit(galerie, request) ma_se_zobrazit = zobrazit(galerie, request)
if not ma_se_zobrazit: raise Http404("Galerie sice existuje, ale my se tváříme, že ne :-D") if not ma_se_zobrazit: raise Http404("Galerie sice existuje, ale my se tváříme, že ne :-D")
@ -95,10 +95,10 @@ def detail(request, pk, fotka, soustredeni):
soustredeni = top_galerie(galerie).soustredeni soustredeni = top_galerie(galerie).soustredeni
ma_se_zobrazit = zobrazit(galerie, request) ma_se_zobrazit = zobrazit(galerie, request)
if not ma_se_zobrazit: raise Http404("Obrázek neukážu!") if not ma_se_zobrazit: raise Http404("Obrázek neukážu!")
obrazek = get_object_or_404(Obrazek, pk=fotka) obrazek = get_object_or_404(Soubor, pk=fotka)
# Pořadí není povinné. FIXME: `nazev` je zavádějící… Ale tohle je kanonické pořadí obrázků v galerii… # Pořadí není povinné. FIXME: `nazev` je zavádějící… Ale tohle je kanonické pořadí obrázků v galerii…
obrazky = galerie.obrazek_set.all().order_by('poradi', 'nazev') obrazky = galerie.soubor_set.all().order_by('poradi', 'nazev')
obrazky = list(obrazky) obrazky = list(obrazky)
index_obrazku = obrazky.index(obrazek) index_obrazku = obrazky.index(obrazek)
# 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) # 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)
@ -186,7 +186,7 @@ def new_galerie(request, galerie, soustredeni):
# zpracovani obrazku v galerii # zpracovani obrazku v galerii
from galerie.typy import tipniTyp from galerie.typy import tipniTyp
for obr in request.FILES.getlist('obr'): for obr in request.FILES.getlist('obr'):
o = Obrazek() o = Soubor()
o.soubor = obr o.soubor = obr
o.typ = tipniTyp(obr) o.typ = tipniTyp(obr)
o.nazev = str(obr) o.nazev = str(obr)