WIP: Nástroj pro plošné vyrábění problémů #17
Open
ledoian
wants to merge 9 commits from zadavatko_problemu
into master
4 changed files with 92 additions and 0 deletions
@ -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 %} |
@ -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…
Reference in new issue