From c5b5813d754fea920b0606c1c8069701709ae168 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" <ledoian@matfyz.cz> Date: Wed, 19 Mar 2025 22:18:29 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=C5=A0ifrova=C4=8Dka:=20podmno=C5=BEiny=20o?= =?UTF-8?q?dpov=C4=9Bd=C3=AD=20na=20=C5=A1ifry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sifrovacka/admin.py | 3 ++- sifrovacka/models.py | 7 +++++++ sifrovacka/urls.py | 7 ++++++- sifrovacka/views.py | 9 ++++++++- 4 files changed, 23 insertions(+), 3 deletions(-) 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/models.py b/sifrovacka/models.py index cd71fd15..94d6f828 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 2a111faf..112b91f6 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()) + class NapovedaView(FormView): template_name = 'sifrovacka/napoveda.html' From 75fba8003d54f600749120aae5a74155f3722983 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" <ledoian@matfyz.cz> Date: Wed, 19 Mar 2025 22:39:48 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Seznamy=20=C5=A1ifer:=20migrace=20+=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sifrovacka/migrations/0008_seznamsifer.py | 21 +++++++++++++++++++++ sifrovacka/views.py | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 sifrovacka/migrations/0008_seznamsifer.py 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/views.py b/sifrovacka/views.py index 112b91f6..3cda24a2 100644 --- a/sifrovacka/views.py +++ b/sifrovacka/views.py @@ -35,7 +35,7 @@ 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()) + 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):