70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
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": "What’s new in this release…"}),
|
||
} |