Skip to content
Snippets Groups Projects
Commit 73088361 authored by Dorian Lesbre's avatar Dorian Lesbre
Browse files

Added dynamic list

parent c1d649e1
No related branches found
No related tags found
No related merge requests found
from django import forms
from home.models import InterludesParticipant
from home.models import ActivityList, InterludesParticipant
from shared.forms import FormRenderMixin
......@@ -14,9 +14,19 @@ class InscriptionForm(FormRenderMixin, forms.ModelForm):
"meal_saturday_evening", "meal_sunday_morning", "meal_sunday_midday",
)
field_groups = [["school"], ["sleeps"], ["mug"], [
"meal_friday_evening", "meal_saturday_morning", "meal_saturday_midday",
"meal_saturday_evening", "meal_sunday_morning", "meal_sunday_midday",
]]
def save(self, *args, commit=True, **kwargs):
participant = super().save(*args, commit=False, **kwargs)
participant.is_registered = True
if commit:
participant.save()
return participant
class ActivityForm(FormRenderMixin, forms.ModelForm):
class Meta:
model = ActivityList
fields = ("activity",)
{% extends "base.html" %}
{% load static %}
{% block nav_inscription %}current{% endblock %}
{% block "head" %}
<!--<script src="{% static 'js/formset.js' %}"></script>-->
{% endblock %}
{% block "content" %}
<h2>Inscriptions</h2>
<form method="post" action="{% url 'inscription' %}">
<form id="main_form" method="post" action="{% url 'inscription' %}">
{% csrf_token %}
{{ form.as_html }}
<br>
{{ form.as_p }}
<h3>Choix d'activités</h3>
{{ formset.management_data }}
{{ formset.management_form }}
{% for form in formset %}
<div class="activity-form flex">
{{ form.as_p }}
<button class="button delete-activity" style="align-self: center; flex-grow: 0;">Supprimer</button>
</div>
{% endfor %}
<button class="button" id="add-activity">Ajouter une activité</button>
<div class="flex">
<input type="submit" value="Valider">
<a class="button" href="{% url 'accounts:profile' %}">Annuler</a>
</div>
</form>
<script>
const button_add_activity = document.querySelector("#add-activity");
const button_submit_form = document.querySelector('[type="submit"]');
const activity_form = document.getElementsByClassName("activity-form");
const main_form = document.querySelector("#main_form");
const total_forms = document.querySelector("#id_form-TOTAL_FORMS");
const form_regex = /form-(\d*)-/g;
var form_count = activity_form.length - 1;
function add_new_form(event) {
// adds a new activity form when clicking on the + button
event.preventDefault();
// clone the first form and replaces it's id
const new_form = activity_form[0].cloneNode(true);
form_count++;
new_form.innerHTML = new_form.innerHTML.replace(form_regex, `form-${form_count}-`);
// add it and increment form total
main_form.insertBefore(new_form, button_add_activity);
total_forms.setAttribute("value", `${form_count+1}`);
}
button_add_activity.addEventListener("click", add_new_form);
function delete_form(event) {
if (!event.target.classList.contains("delete-activity")) return;
event.preventDefault();
if (form_count == 0) return;
event.target.parentElement.remove();
form_count--;
total_forms.setAttribute("value", `${form_count+1}`);
// update form numbers
let count = 0;
for (const form of activity_form) {
console.log(form.children.item(0).find("option:selected").val())
form.innerHTML = form.innerHTML.replace(form_regex, `form-${count++}-`);
}
}
function change(event) {
console.log(event.target.value)
}
main_form.addEventListener("click", delete_form);
main_form.addEventListener("change", change)
</script>
{% endblock %}
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.sitemaps import Sitemap
from django.forms import modelformset_factory
from django.shortcuts import redirect, render
from django.urls import reverse
from django.views.generic import UpdateView, TemplateView, View
from home.models import InterludesActivity
from home.forms import InscriptionForm
from home.models import ActivityList, InterludesActivity
from home.forms import ActivityForm, InscriptionForm
from site_settings.models import SiteSettings
......@@ -44,6 +45,12 @@ class RegisterUpdateView(LoginRequiredMixin, UpdateView):
"""Vue pour s'inscrire et modifier son inscription"""
template_name = "inscription/form.html"
form_class = InscriptionForm
formset = modelformset_factory(ActivityList, form=ActivityForm, extra=3)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["formset"] = self.formset(queryset=ActivityList.objects.none())
return context
def get_object(self):
return self.request.user.profile
......@@ -55,6 +62,15 @@ class RegisterUpdateView(LoginRequiredMixin, UpdateView):
messages.success(self.request, "Votre inscription a été enregistrée")
return super().form_valid(form)
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
formset = self.formset(request.POST)
if formset.is_valid():
print("\n\n{} {}\n\n".format(len(formset), formset))
else:
print("\n\nInvalid\n\n")
return super().post(request, *args, **kwargs)
class RegisterView(View):
"""Vue pour l'inscription
repartie sur les vue RegisterClosed, RegisterSignIn et RegisterUpdateView"""
......
......@@ -96,8 +96,8 @@ class FormRenderMixin:
' <div class="label_line">\n'
' <label for="{label_for}">{label_text}&nbsp;:</label>\n{errors}'
" </div>\n"
" {field_html}\n"
' <div class="help">{tooltip}{inline_helptext_html}</div>\n'
" {field_html}{tooltip}\n"
' <div class="help">{inline_helptext_html}</div>\n'
" </div>\n"
"</div>"
).format(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment