Upgrade odevzdavatka #30
					 13 changed files with 243 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -150,6 +150,7 @@ INSTALLED_APPS = (
 | 
			
		|||
	'personalni',
 | 
			
		||||
	'soustredeni',
 | 
			
		||||
	'treenode',
 | 
			
		||||
	'vyroci',
 | 
			
		||||
 | 
			
		||||
	# Admin upravy:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,9 @@ urlpatterns = [
 | 
			
		|||
	# REST API
 | 
			
		||||
#	path('api/', include(router.urls)),
 | 
			
		||||
 | 
			
		||||
	# Výroční sraz
 | 
			
		||||
	path('sraz/30-let/', include('vyroci.urls')),
 | 
			
		||||
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# This is only needed when using runserver.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										0
									
								
								vyroci/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vyroci/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										7
									
								
								vyroci/admin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vyroci/admin.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vyroci/apps.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
from django.apps import AppConfig
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VyrociConfig(AppConfig):
 | 
			
		||||
    name = 'vyroci'
 | 
			
		||||
							
								
								
									
										14
									
								
								vyroci/forms.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vyroci/forms.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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"]:
 | 
			
		||||
			self.fields[field].widget.attrs['rows'] = 2
 | 
			
		||||
			self.fields[field].widget.attrs['cols'] = 22
 | 
			
		||||
							
								
								
									
										27
									
								
								vyroci/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vyroci/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vyroci/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										40
									
								
								vyroci/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vyroci/models.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								vyroci/templates/vyroci/vyroci.html
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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>
 | 
			
		||||
          </tr>
 | 
			
		||||
        {% endif %}
 | 
			
		||||
      {% endfor %}
 | 
			
		||||
    </table>
 | 
			
		||||
 | 
			
		||||
    {% csrf_token %}
 | 
			
		||||
 | 
			
		||||
    <input type="submit" value="Přihlásit se!">
 | 
			
		||||
  </form>
 | 
			
		||||
 | 
			
		||||
{% endblock content %}
 | 
			
		||||
							
								
								
									
										31
									
								
								vyroci/templates/vyroci/vyroci_list.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vyroci/templates/vyroci/vyroci_list.html
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vyroci/urls.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vyroci/views.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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 a new issue