13 changed files with 243 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||||
|
from django.contrib import admin |
||||
|
|
||||
|
from .models import UcastnikVyroci |
||||
|
|
||||
|
# Register your models here. |
||||
|
|
||||
|
admin.site.register(UcastnikVyroci) |
@ -0,0 +1,5 @@ |
|||||
|
from django.apps import AppConfig |
||||
|
|
||||
|
|
||||
|
class VyrociConfig(AppConfig): |
||||
|
name = 'vyroci' |
@ -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
|
|||||
|
self.fields[field].widget.attrs['rows'] = 2 |
||||
|
self.fields[field].widget.attrs['cols'] = 22 |
@ -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,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, |
||||
|
) |
||||
|
|
@ -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 účastníky, předminulými organizátory a účastníky, předpředminulými organizátory a účastníky a 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 vyplň přihlašovací formulář níže (pokud plánuješ přijet jen na část víkendu nebo s sebou někoho vzít – třeba děti, tak to napiš do poznámky). Podrobnější informace o 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
|
|||||
|
</tr> |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
|
||||
zelvuska marked this conversation as resolved
|
|||||
|
{% csrf_token %} |
||||
|
|
||||
|
<input type="submit" value="Přihlásit se!"> |
||||
|
</form> |
||||
|
|
||||
|
{% endblock content %} |
@ -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 %} |
@ -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' |
||||
|
), |
||||
|
] |
@ -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…
Reference in new issue
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…)Aha, to je jen podmnožina fieldů. OK then…