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…