78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
"""Django Forms to administrate the event content on the frontend."""
|
|
from django import forms
|
|
from django.contrib.auth import get_user_model
|
|
from django.utils.translation import gettext as _
|
|
|
|
from . import models
|
|
|
|
|
|
class ClearableMultipleFileInput(forms.widgets.ClearableFileInput):
|
|
allow_multiple_selected = True
|
|
accept = "image/jpg"
|
|
|
|
|
|
class MultipleFileField(forms.FileField):
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs.setdefault("widget", ClearableMultipleFileInput())
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def clean(self, data, initial=None):
|
|
single_file_clean = super().clean
|
|
if isinstance(data, (list, tuple)):
|
|
result = [single_file_clean(d, initial) for d in data]
|
|
else:
|
|
result = single_file_clean(data, initial)
|
|
return result
|
|
|
|
|
|
class PhotoUploadForm(forms.Form):
|
|
"""Form to upload multiple photos to a single event.
|
|
TODO: Check multiple upload
|
|
"""
|
|
error_css_class = 'error'
|
|
required_css_class = 'required'
|
|
photographer = forms.ModelChoiceField(get_user_model().objects.all(),
|
|
required=True, )
|
|
event = forms.ModelChoiceField(models.Event.objects.all(), required=True, )
|
|
upload = MultipleFileField(
|
|
label=_('Images'),
|
|
required=True,
|
|
)
|
|
|
|
|
|
class EditPhotoForm(forms.ModelForm):
|
|
"""From to edit the metadata of a photo."""
|
|
error_css_class = 'error'
|
|
required_css_class = 'required'
|
|
|
|
class Meta(object):
|
|
"""Metadata to localize and customize the ModelForm."""
|
|
model = models.Photo
|
|
fields = ('event', 'name', 'description', 'photographer',
|
|
'created_date', 'on_startpage')
|
|
|
|
|
|
class EventForm(forms.ModelForm):
|
|
"""Form to add or edit an event."""
|
|
error_css_class = 'error'
|
|
required_css_class = 'required'
|
|
|
|
start = forms.SplitDateTimeField(
|
|
label=_('start'), required=True,
|
|
)
|
|
end = forms.SplitDateTimeField(
|
|
label=_('end'), required=False,
|
|
)
|
|
|
|
class Meta(object):
|
|
"""Metadata to localize and customize the ModelForm."""
|
|
model = models.Event
|
|
exclude = ('event_count', 'event_series',)
|
|
|
|
|
|
EventSeriesFormset = forms.inlineformset_factory( # Ignore PyLintBear (C0103)
|
|
models.Event,
|
|
models.Event,
|
|
fields=('start', 'end'),
|
|
form=EventForm)
|