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