WIP: Nástroj pro plošné vyrábění problémů #17

Open
ledoian wants to merge 9 commits from zadavatko_problemu into master
  1. 47
      tvorba/templates/tvorba/org/vyroba_problemu.html
  2. 2
      tvorba/urls.py
  3. 3
      tvorba/views/__init__.py
  4. 40
      tvorba/views/zadavatko_problemu.py

47
tvorba/templates/tvorba/org/vyroba_problemu.html

@ -0,0 +1,47 @@
{% extends "base.html" %}
{% block content %}
<h1>
{% block nadpis1a %}
Zadané problémy k tématu {{ tema }}
{# TODO: Jak chceme umožnit problémy jak k témátku tak všechny? #}
{% endblock %}
</h1>
<form method=POST><table class="dosla_reseni">
{% csrf_token %}
<tr>
<th>{# checkbox #}</th>
<th>Úloha/Problém</th>
<th>Stav</th>
<th>{# admin #}</th>
</tr>
{% for obj in object_list %}
<tr>
<td><input type=checkbox name="problem_id" value="{{ obj.pk }}" id="problem_{{ obj.pk }}"</td>
<td>{{ obj.nazev }}</td>
<td>{{ obj.get_stav_display }}</td>
<td><a href="{% url 'admin:seminar_problem_change' obj.pk %}">🔧</a></td>
</tr>
{% endfor %}
</table>
Označené problémy označit jako: <select name=akce>
{% for k,v in STAVY.items %}
<option value="{{ k }}">{{ v }}</option>
{% endfor %}
</select>
<input type=submit value=Proveď>
</form>
<hrule>
<h1> Přidat problémy </h1>
<form>
{% csrf_token %}
{{ form }}
{# - Téma, čísla úloh, čísla problémů, šablona názvu problému. #}
</form>
<p>TODO: Help text: jak vypadá formát čísel, co se dá psát do šablony</p>
<p>Pokud chceš přidat jen jeden problém nebo vyrobit témátko, použij k tomu spíš <a href="{% url 'admin:seminar_problem_changelist' %}">Admin 🔧</a>.
{% endblock content %}

2
tvorba/urls.py

@ -72,4 +72,6 @@ urlpatterns = [
org_required(views.HromadnePridaniView.as_view()), org_required(views.HromadnePridaniView.as_view()),
name="hromadne_pridani" name="hromadne_pridani"
), ),
path('test/zadavatko_problemu', org_required(views.zadavatkoProblemuView), name='zadavatko_problemu'),
] ]

3
tvorba/views/__init__.py

@ -1,6 +1,9 @@
# Dočsasné views # Dočsasné views
from .docasne import * from .docasne import *
# Zadávátko problémů
from .zadavatko_problemu import zadavatkoProblemuView
# Zbytek # Zbytek
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render

40
tvorba/views/zadavatko_problemu.py

@ -0,0 +1,40 @@
import seminar.models as m
from django.shortcuts import render
def zadavatkoProblemuView(req, problem=None):
template_name = 'tvorba/org/vyroba_problemu.html'
if req.method == 'POST':
cilovy_stav = req.POST['akce']
pr = req.POST['problem_id']
print(cilovy_stav, pr)
if problem is None:
# Vykradený autocomplete :-)
rocnik = m.Nastaveni.get_solo().aktualni_rocnik
problemy = m.Uloha.objects.filter(cislo_zadani__rocnik=rocnik)
# Věříme, že drtivá většina úložek bude mít číslo zadání už od vzniku, protože vznikly tady. K úložce bez čísla zadání se pořád dá dostat přes témátko, k těm netémátkovým jen z Admina.
else:
problemy = problem.podproblemy_rekurzivne
# Je potřeba mít v kontextu:
# - seznam příslušných problémů
# - Formulář na vybírání problémů a společné změny
# - Umět filtrovat jen na nevyřešené problémy (Návrhy, Smazané a Vyřešené nechci vidět vždycky)
# - Formulář na vyrábění problémů – logika má být asi ve forms…
ctx = {'object_list': problemy, 'form': 'Hello!', 'STAVY': dict(m.Problem.STAV_CHOICES)}
return render(req, template_name, ctx)
# TODO: Přesunout forms někam jinam! (nechtělo se mi počáteční implementaci sekat do spousty souborů, pro vývoj to bylo přehlednější)
# NOTE: Formsety nejdou použít, protože my chceme vlastní značítka.
# - Na takovém řádku chceme:
# - Zaškrtávátko s výběrem
# - Přehled stavu: název problému, stav, číslo zadání, počet bodů
# - Nějak snadno umět upravit stav. (Výhledově inlinemodelform + disketka asi)
# - Odkaz do Admina
# - Reset opravovatelů/garantů/… (i.e. podědit z nadproblému)?
Loading…
Cancel
Save