Výroční sraz M&M #32

Merged
zelvuska merged 12 commits from vyroci into master 1 year ago
  1. 1
      mamweb/settings_common.py
  2. 3
      mamweb/urls.py
  3. 0
      vyroci/__init__.py
  4. 7
      vyroci/admin.py
  5. 5
      vyroci/apps.py
  6. 14
      vyroci/forms.py
  7. 27
      vyroci/migrations/0001_initial.py
  8. 0
      vyroci/migrations/__init__.py
  9. 40
      vyroci/models.py
  10. 62
      vyroci/templates/vyroci/vyroci.html
  11. 31
      vyroci/templates/vyroci/vyroci_list.html
  12. 17
      vyroci/urls.py
  13. 36
      vyroci/views.py

1
mamweb/settings_common.py

@ -150,6 +150,7 @@ INSTALLED_APPS = (
'personalni', 'personalni',
'soustredeni', 'soustredeni',
'treenode', 'treenode',
'vyroci',
# Admin upravy: # Admin upravy:

3
mamweb/urls.py

@ -68,6 +68,9 @@ urlpatterns = [
# REST API # REST API
# path('api/', include(router.urls)), # path('api/', include(router.urls)),
# Výroční sraz
path('sraz/30-let/', include('vyroci.urls')),
] ]
# This is only needed when using runserver. # This is only needed when using runserver.

0
vyroci/__init__.py

7
vyroci/admin.py

@ -0,0 +1,7 @@
from django.contrib import admin
from .models import UcastnikVyroci
# Register your models here.
admin.site.register(UcastnikVyroci)

5
vyroci/apps.py

@ -0,0 +1,5 @@
from django.apps import AppConfig
class VyrociConfig(AppConfig):
name = 'vyroci'

14
vyroci/forms.py

@ -0,0 +1,14 @@
from django.forms import ModelForm
from .models import UcastnikVyroci
class UcastnikVyrociForm(ModelForm):
class Meta:
model = UcastnikVyroci
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in ["kdy", "cojemam", "cislo", "dodat"]:
ledoian marked this conversation as resolved
Review

Neumí se tohle nějak odkázat na vlastní fieldy? Čekal bych tam nějaké self.fields. (Ale asi je to dost šumák, stejně se to jednou napíše, jednou použije a pak jednou možná smaže, takže je to spíš možnost se naučit nové triky s Djangem než potřeba upravit…)

Neumí se tohle nějak odkázat na vlastní fieldy? Čekal bych tam nějaké `self.fields`. (Ale asi je to dost šumák, stejně se to jednou napíše, jednou použije a pak jednou možná smaže, takže je to spíš možnost se naučit nové triky s Djangem než potřeba upravit…)
Review

Aha, to je jen podmnožina fieldů. OK then…

Aha, to je jen podmnožina fieldů. OK then…
self.fields[field].widget.attrs['rows'] = 2
self.fields[field].widget.attrs['cols'] = 22

27
vyroci/migrations/0001_initial.py

@ -0,0 +1,27 @@
# Generated by Django 2.2.28 on 2023-06-02 18:55
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='UcastnikVyroci',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('jmeno', models.CharField(help_text='Občanská identifikace účastníka víkendovky', max_length=256, verbose_name='Jméno a příjmení')),
('prezdivka', models.CharField(help_text='Zveřejňovaná identifikace účastníka víkendovky', max_length=256, verbose_name='Přezdívka (do seznamu účastníků, například Bětka N.)')),
('email', models.EmailField(help_text='Kontakt na účastníka víkendovky', max_length=256, verbose_name='E-mail')),
('kdy', models.TextField(verbose_name='Řešil nebo organizoval jsi M&M? Kdy?')),
('cojemam', models.TextField(verbose_name='Co znamená M&M (a proč)?')),
('cislo', models.TextField(verbose_name='Co v M&Mí historii značí číslo 265252859812191058636308480000000?')),
('dodat', models.TextField(blank=True, null=True, verbose_name='Co chci ještě dodat?')),
],
),
]

0
vyroci/migrations/__init__.py

40
vyroci/models.py

@ -0,0 +1,40 @@
from django.db import models
# Create your models here.
class UcastnikVyroci(models.Model):
jmeno = models.CharField(
"Jméno a příjmení", max_length=256, blank=False, null=False,
help_text="Občanská identifikace účastníka víkendovky"
)
prezdivka = models.CharField(
"Přezdívka (do seznamu účastníků, například Bětka N.)", max_length=256, blank=False, null=False,
help_text="Zveřejňovaná identifikace účastníka víkendovky"
)
email = models.EmailField(
"E-mail", max_length=256, blank=False, null=False,
help_text="Kontakt na účastníka víkendovky"
)
kdy = models.TextField(
"Řešil nebo organizoval jsi M&M? Kdy?", blank=False,
null=False,
)
cojemam = models.TextField(
"Co znamená M&M (a proč)?", blank=False, null=False,
)
cislo = models.TextField(
"Co v M&Mí historii značí číslo 265252859812191058636308480000000?",
blank=False, null=False,
)
dodat = models.TextField(
"Co chci ještě dodat?", blank=True, null=True,
)

62
vyroci/templates/vyroci/vyroci.html

@ -0,0 +1,62 @@
{% extends "base.html" %}
{% block content %}
<br>
<h1>{% block nadpis1a %}M&Mí 30!*{% endblock nadpis1a %}</h1>
<br>
<h4>*plným názvem M&Mí 265252859812191058636308480000000.</h4>
<br>
<p>Rádi bychom Tě pozvali na plánovaný M&Mí sraz, kde nalezneš možnost se setkat se současnými organizátory, minulými organizátory a&nbsp;účastníky, předminulými organizátory a&nbsp;účastníky, předpředminulými organizátory a&nbsp;účastníky a&nbsp;jinými M&Mími legendami.</p>
<p>Těšit se můžeš na zábavnou akci pro všechny věkové kategorie. Pokud máš chuť se zúčastnit, tak neváhej a&nbsp;vyplň přihlašovací formulář níže (pokud plánuješ přijet jen na část víkendu nebo s&nbsp;sebou někoho vzít&nbsp;&nbsp;třeba děti, tak to napiš do poznámky). Podrobnější informace o&nbsp;akci budeme rozesílat přibližně dva týdny před akcí.</p>
<ul>
<li> Kdy: pátek 22. – neděle 24. 9. 2023 </li>
<li> Kde: <a href="https://borovice.cz/inzerat/2587-zakladna-pratel-prirody-upirci-2">Klubovna Upírků v Libčicích n.V.</a></li>
<li> Kdo jede: {% for ucastnik in ucastnici %}{% if not forloop.first %}, {% endif %}{{ ucastnik.prezdivka }}{% endfor %}</li>
</ul>
<h2>Přihlašovací formulář</h2>
<p><b>Tučně</b> popsaná pole jsou povinná.</p>
<form action="{% url 'vyrocni_sraz' %}" method="post">
<table class="form">
{{form.non_field_errors}}
{% for field in form %}
<tr>
<td>
<label class="field-label{% if field.field.required %} field-required{% endif %}" for="{{ field.id_for_label }}">
{{ field.label }}
</label>
</td>
<td {% if field.help_text %} class="field-with-comment"{% endif %}>
{{ field }}
<span class="field-comment">{{ field.help_text|safe }}</span>
</td>
</tr>
{% if field.errors %}
<tr>
<td colspan="2"><span class="field-error">{{ field.errors }}</span></td>
zelvuska marked this conversation as resolved
Review

Non-field errors bych čekal spíš nahoře než dole…

Non-field errors bych čekal spíš nahoře než dole…
</tr>
{% endif %}
{% endfor %}
</table>
zelvuska marked this conversation as resolved
Review

Template prohlížím jen zběžně, pokud to dobře vypadá (i ve Chrome a Edgi :-P), tak je mi asi jedno, jak to vypadá…

Template prohlížím jen zběžně, pokud to dobře vypadá (i ve Chrome a Edgi :-P), tak je mi asi jedno, jak to vypadá…
{% csrf_token %}
<input type="submit" value="Přihlásit se!">
</form>
{% endblock content %}

31
vyroci/templates/vyroci/vyroci_list.html

@ -0,0 +1,31 @@
{% extends "base.html" %}
{% block content %}
<h1>{% block nadpis1a %}M&Mí 30! odpovědi{% endblock nadpis1a %}</h1>
<table class="dosla_reseni">
<tr>
<th>Jméno</th>
<th>Přezdívka</th>
<th>E-mail</th>
<th>Kdy účastník/org</th>
<th>Co znamená M&M?</th>
<th>Co znamená číslo?</th>
<th>Něco dodat?</th>
</tr>
{% for u in object_list %}
<tr>
<td>{{ u.jmeno }}</td>
<td>{{ u.prezdivka }}</td>
<td>{{ u.email }}</td>
<td style="word-break: break-all">{{ u.kdy }}</td>
<td style="word-break: break-all">{{ u.cojemam }}</td>
<td style="word-break: break-all">{{ u.cislo }}</td>
<td style="word-break: break-all">{{ u.dodat }}</td>
</tr>
{% endfor %}
</table>
{% endblock content %}

17
vyroci/urls.py

@ -0,0 +1,17 @@
from django.urls import path
from seminar.utils import org_required
from .views import VyrociView, VyrociListView
urlpatterns = [
path(
'',
VyrociView.as_view(),
name='vyrocni_sraz'
),
path(
'ucastnici/',
org_required(VyrociListView.as_view()),
name='vyrocni_sraz_ucastnici'
),
]

36
vyroci/views.py

@ -0,0 +1,36 @@
from django.views.generic import FormView, ListView
from seminar.models import Osoba
from seminar.views import formularOKView
from .forms import UcastnikVyrociForm
from .models import UcastnikVyroci
# Create your views here.
class VyrociView(FormView):
template_name = 'vyroci/vyroci.html'
form_class = UcastnikVyrociForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['ucastnici'] = UcastnikVyroci.objects.all()
return context
def form_valid(self, form):
form.save()
return formularOKView(self.request, "Úspěšně ses přihlásil na sraz")
def get_initial(self):
initial = super().get_initial()
if self.request.user.is_authenticated:
osoba = Osoba.objects.filter(user=self.request.user).first()
if osoba is not None:
initial["jmeno"] = osoba.plne_jmeno()
initial["email"] = osoba.email
return initial
class VyrociListView(ListView):
template_name = 'vyroci/vyroci_list.html'
model = UcastnikVyroci
Loading…
Cancel
Save