Illustrations/web/core/forms.py

70 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django import forms
from .models_ann import Announcement
from django.forms import ModelForm, Textarea
class ImportForm(forms.Form):
file = forms.FileField(allow_empty_file=False)
dry_run = forms.BooleanField(initial=True, required=False, help_text="Preview changes without saving")
class EntryForm(forms.Form):
subject = forms.CharField(required=False)
illustration = forms.CharField(required=False, widget=forms.Textarea)
application = forms.CharField(required=False, widget=forms.Textarea)
scripture_raw = forms.CharField(required=False)
source = forms.CharField(required=False)
talk_title = forms.CharField(required=False)
# Coerce blank -> None, digits -> int
talk_number = forms.TypedChoiceField(
required=False,
choices=[("", "")] + [(str(i), str(i)) for i in range(1, 201)], # blank + 1-200
coerce=lambda v: int(v) if str(v).isdigit() else None,
empty_value=None, # when the blank option is chosen, cleaned_data["talk_number"] == None
)
entry_code = forms.CharField(required=False)
date_added = forms.DateField(required=False, widget=forms.DateInput(attrs={"type": "date"}))
date_edited = forms.DateField(required=False, widget=forms.DateInput(attrs={"type": "date"}))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
big_inputs = ("subject", "scripture_raw", "source", "talk_title", "entry_code")
textareas = ("illustration", "application")
for name in big_inputs:
if name in self.fields:
self.fields[name].widget.attrs.update({
"class": "search-input input-hero"
})
for name in textareas:
if name in self.fields:
self.fields[name].widget.attrs.update({
"class": "search-input input-hero textarea-hero"
})
if "talk_number" in self.fields:
self.fields["talk_number"].widget.attrs.update({
"class": "search-input input-hero"
})
if "date_added" in self.fields:
self.fields["date_added"].widget.attrs.update({"class": "search-input input-hero"})
if "date_edited" in self.fields:
self.fields["date_edited"].widget.attrs.update({"class": "search-input input-hero"})
# (Optional) keep it bullet-proof even if the choices/widget change someday
def clean_talk_number(self):
v = self.cleaned_data.get("talk_number")
return v if isinstance(v, int) else None
class AnnouncementForm(ModelForm):
class Meta:
model = Announcement
fields = ["title", "message", "is_active", "start_at", "end_at"]
widgets = {
"message": Textarea(attrs={"rows": 6, "placeholder": "Whats new in this release…"}),
}