added uploading files to absences
This commit is contained in:
parent
8db28b9838
commit
c3c4623931
4 changed files with 40 additions and 14 deletions
|
@ -3,6 +3,24 @@ from django import forms
|
||||||
from Palto.Palto import models
|
from Palto.Palto import models
|
||||||
|
|
||||||
|
|
||||||
|
# Common
|
||||||
|
class MultipleFileInput(forms.ClearableFileInput):
|
||||||
|
allow_multiple_selected = True
|
||||||
|
|
||||||
|
|
||||||
|
class MultipleFileField(forms.FileField):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs.setdefault("widget", MultipleFileInput())
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def clean(self, data, initial=None):
|
||||||
|
file_cleaner = super().clean
|
||||||
|
if isinstance(data, (list, tuple)):
|
||||||
|
return [file_cleaner(d, initial) for d in data]
|
||||||
|
else:
|
||||||
|
return file_cleaner(data, initial)
|
||||||
|
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,6 +37,7 @@ class NewAbsenceForm(forms.Form):
|
||||||
start = forms.DateTimeField(widget=forms.TextInput(attrs=dict(type='datetime-local')))
|
start = forms.DateTimeField(widget=forms.TextInput(attrs=dict(type='datetime-local')))
|
||||||
end = forms.DateTimeField(widget=forms.TextInput(attrs=dict(type='datetime-local')))
|
end = forms.DateTimeField(widget=forms.TextInput(attrs=dict(type='datetime-local')))
|
||||||
message = forms.CharField(widget=forms.Textarea)
|
message = forms.CharField(widget=forms.Textarea)
|
||||||
|
attachments = MultipleFileField(required=False)
|
||||||
|
|
||||||
def __init__(self, student: models.User, *args, **kwargs):
|
def __init__(self, student: models.User, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{% extends "Palto/base.html" %}
|
{% extends "Palto/base.html" %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<form method="POST">
|
<form method="POST" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table>
|
<table>
|
||||||
{{ form_new_absence.as_table }}
|
{{ form_new_absence.as_table }}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
{# absence's attachments #}
|
{# absence's attachments #}
|
||||||
<div>
|
<div>
|
||||||
{% for attachment in absence.attachments.all %}
|
{% for attachment in absence.attachments.all %}
|
||||||
<a href="{{ attachment.content.url }}">{{ attachment.content.name }}</a>
|
<a href="{{ attachment.content.url }}" target="_blank">{{ attachment.content.name }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -202,24 +202,31 @@ def new_absence_view(request: WSGIRequest):
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
# create a form for the new absence
|
# create a form for the new absence
|
||||||
form_new_absence = forms.NewAbsenceForm(request.user, request.POST)
|
form_new_absence = forms.NewAbsenceForm(request.user, request.POST, request.FILES)
|
||||||
|
|
||||||
if form_new_absence.is_valid():
|
if form_new_absence.is_valid():
|
||||||
try:
|
print(form_new_absence.files, form_new_absence.cleaned_data)
|
||||||
models.Absence.objects.create(
|
|
||||||
student=request.user,
|
absence, is_created = models.Absence.objects.get_or_create(
|
||||||
start=form_new_absence.cleaned_data["start"],
|
student=request.user,
|
||||||
end=form_new_absence.cleaned_data["end"],
|
start=form_new_absence.cleaned_data["start"],
|
||||||
department=form_new_absence.cleaned_data["department"],
|
end=form_new_absence.cleaned_data["end"],
|
||||||
message=form_new_absence.cleaned_data["message"],
|
department=form_new_absence.cleaned_data["department"],
|
||||||
)
|
message=form_new_absence.cleaned_data["message"],
|
||||||
except IntegrityError:
|
)
|
||||||
|
|
||||||
|
if not is_created:
|
||||||
|
# if the absence already existed, show an error
|
||||||
form_new_absence.add_error(None, "This absence already exists.")
|
form_new_absence.add_error(None, "This absence already exists.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return redirect("Palto:homepage") # TODO(Faraphel): redirect to absence list
|
# add the attachments files to the absence
|
||||||
|
for file in form_new_absence.cleaned_data["attachments"]:
|
||||||
|
absence.attachments.create(
|
||||||
|
content=file
|
||||||
|
)
|
||||||
|
|
||||||
# TODO(Faraphel): add attachments to the forms
|
return redirect("Palto:homepage") # TODO(Faraphel): redirect to absence list
|
||||||
|
|
||||||
# render the page
|
# render the page
|
||||||
return render(
|
return render(
|
||||||
|
|
Loading…
Reference in a new issue