diff --git a/sifrovacka/admin.py b/sifrovacka/admin.py index ff980cd9..ec159726 100644 --- a/sifrovacka/admin.py +++ b/sifrovacka/admin.py @@ -1,8 +1,9 @@ from django.contrib import admin -from .models import OdpovedUcastnika, SpravnaOdpoved, NapovezenoUcastnikovi, Napoveda +from .models import OdpovedUcastnika, SpravnaOdpoved, NapovezenoUcastnikovi, Napoveda, SeznamSifer admin.site.register(OdpovedUcastnika) admin.site.register(SpravnaOdpoved) admin.site.register(Napoveda) admin.site.register(NapovezenoUcastnikovi) +admin.site.register(SeznamSifer) diff --git a/sifrovacka/migrations/0008_seznamsifer.py b/sifrovacka/migrations/0008_seznamsifer.py new file mode 100644 index 00000000..ea211afe --- /dev/null +++ b/sifrovacka/migrations/0008_seznamsifer.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.20 on 2025-03-19 21:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0007_alter_napoveda_sifra_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='SeznamSifer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('jmeno', models.CharField(help_text='něco co jde zadat do adresy', max_length=255, verbose_name='Jméno seznamu')), + ('sifry', models.ManyToManyField(to='sifrovacka.spravnaodpoved')), + ], + ), + ] diff --git a/sifrovacka/models.py b/sifrovacka/models.py index 5745dd8f..e96a6d99 100644 --- a/sifrovacka/models.py +++ b/sifrovacka/models.py @@ -39,3 +39,10 @@ class Napoveda(models.Model): def __str__(self): return f"{self.sifra}: {self.text}" + +class SeznamSifer(models.Model): + jmeno = models.CharField("Jméno seznamu", max_length=255, blank=False, null=False, help_text="něco co jde zadat do adresy") + sifry = models.ManyToManyField(SpravnaOdpoved) + + def __str__(self): + return f"{self.jmeno}" diff --git a/sifrovacka/urls.py b/sifrovacka/urls.py index 1357ef27..63e9a5c2 100644 --- a/sifrovacka/urls.py +++ b/sifrovacka/urls.py @@ -1,7 +1,7 @@ from django.urls import path from personalni.utils import org_required, resitel_or_org_required -from .views import SifrovackaView, SifrovackaListView, NapovedaView, NapovedaListView, PreskoceniView +from .views import SifrovackaView, SifrovackaListView, SifrovackaNektereListView, NapovedaView, NapovedaListView, PreskoceniView urlpatterns = [ path( @@ -14,6 +14,11 @@ urlpatterns = [ org_required(SifrovackaListView.as_view()), name='sifrovacka_odpovedi' ), + path( + 'odpovedi/<str:seznam>/', + org_required(SifrovackaNektereListView.as_view()), + name='sifrovacka_odpovedi_nektere' + ), path( 'napoveda/', resitel_or_org_required(NapovedaView.as_view()), diff --git a/sifrovacka/views.py b/sifrovacka/views.py index 40838dac..a525131a 100644 --- a/sifrovacka/views.py +++ b/sifrovacka/views.py @@ -1,9 +1,10 @@ +from django.shortcuts import get_object_or_404 from django.urls import reverse from django.views.generic import FormView, ListView from various.views.pomocne import formularOKView from .forms import SifrovackaForm, NapovedaForm -from .models import OdpovedUcastnika, SpravnaOdpoved, Napoveda, NapovezenoUcastnikovi +from .models import OdpovedUcastnika, SpravnaOdpoved, Napoveda, NapovezenoUcastnikovi, SeznamSifer from personalni.models import Resitel @@ -30,6 +31,12 @@ class SifrovackaListView(ListView): template_name = 'sifrovacka/odpovedi_list.html' model = OdpovedUcastnika +class SifrovackaNektereListView(SifrovackaListView): + def get_queryset(self): + seznam = get_object_or_404(SeznamSifer, jmeno=self.kwargs['seznam']) + orig = super().get_queryset() + return orig.filter(sifra__in=seznam.sifry.all().values('sifra')) # poslední je kvůli tomu, že máme odkaz na celý objekt a ne jen na jméno šifry. + class NapovedaView(FormView): template_name = 'sifrovacka/napoveda.html'