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
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
|
@ -19,6 +37,7 @@ class NewAbsenceForm(forms.Form):
|
|||
start = 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)
|
||||
attachments = MultipleFileField(required=False)
|
||||
|
||||
def __init__(self, student: models.User, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{% extends "Palto/base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<form method="POST">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ form_new_absence.as_table }}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
{# absence's attachments #}
|
||||
<div>
|
||||
{% 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 %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -202,24 +202,31 @@ def new_absence_view(request: WSGIRequest):
|
|||
return HttpResponseForbidden()
|
||||
|
||||
# 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():
|
||||
try:
|
||||
models.Absence.objects.create(
|
||||
student=request.user,
|
||||
start=form_new_absence.cleaned_data["start"],
|
||||
end=form_new_absence.cleaned_data["end"],
|
||||
department=form_new_absence.cleaned_data["department"],
|
||||
message=form_new_absence.cleaned_data["message"],
|
||||
)
|
||||
except IntegrityError:
|
||||
print(form_new_absence.files, form_new_absence.cleaned_data)
|
||||
|
||||
absence, is_created = models.Absence.objects.get_or_create(
|
||||
student=request.user,
|
||||
start=form_new_absence.cleaned_data["start"],
|
||||
end=form_new_absence.cleaned_data["end"],
|
||||
department=form_new_absence.cleaned_data["department"],
|
||||
message=form_new_absence.cleaned_data["message"],
|
||||
)
|
||||
|
||||
if not is_created:
|
||||
# if the absence already existed, show an error
|
||||
form_new_absence.add_error(None, "This absence already exists.")
|
||||
|
||||
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
|
||||
return render(
|
||||
|
|
Loading…
Reference in a new issue