Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Site Interludes
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mediatek
Site Interludes
Commits
73088361
Commit
73088361
authored
4 years ago
by
Dorian Lesbre
Browse files
Options
Downloads
Patches
Plain Diff
Added dynamic list
parent
c1d649e1
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
home/forms.py
+11
-1
11 additions, 1 deletion
home/forms.py
home/templates/inscription/form.html
+68
-3
68 additions, 3 deletions
home/templates/inscription/form.html
home/views.py
+18
-2
18 additions, 2 deletions
home/views.py
shared/forms.py
+2
-2
2 additions, 2 deletions
shared/forms.py
with
99 additions
and
8 deletions
home/forms.py
+
11
−
1
View file @
73088361
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
"
,)
This diff is collapsed.
Click to expand it.
home/templates/inscription/form.html
+
68
−
3
View file @
73088361
{% 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 %}
This diff is collapsed.
Click to expand it.
home/views.py
+
18
−
2
View file @
73088361
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\n
Invalid
\n\n
"
)
return
super
().
post
(
request
,
*
args
,
**
kwargs
)
class
RegisterView
(
View
):
"""
Vue pour l
'
inscription
repartie sur les vue RegisterClosed, RegisterSignIn et RegisterUpdateView
"""
...
...
This diff is collapsed.
Click to expand it.
shared/forms.py
+
2
−
2
View file @
73088361
...
...
@@ -96,8 +96,8 @@ class FormRenderMixin:
'
<div class=
"
label_line
"
>
\n
'
'
<label for=
"
{label_for}
"
>{label_text} :</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
(
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment