2026-01-19 22:01:33 -05:00
|
|
|
from django import forms
|
2026-01-23 22:23:40 -05:00
|
|
|
from django.core.exceptions import ValidationError
|
2026-01-19 22:01:33 -05:00
|
|
|
from .models import Item
|
|
|
|
|
|
2026-01-23 22:23:40 -05:00
|
|
|
DUPLICATE_ITEM_ERROR = "You've already logged this to your list"
|
2026-01-19 22:01:33 -05:00
|
|
|
EMPTY_ITEM_ERROR = "You can't have an empty list item"
|
|
|
|
|
|
|
|
|
|
class ItemForm(forms.models.ModelForm):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Item
|
|
|
|
|
fields = ("text",)
|
|
|
|
|
widgets = {
|
|
|
|
|
"text": forms.widgets.TextInput(
|
|
|
|
|
attrs={
|
|
|
|
|
"placeholder": "Enter a to-do item",
|
|
|
|
|
"class": "form-control form-control-lg",
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
error_messages = {"text": {"required": EMPTY_ITEM_ERROR}}
|
2026-01-21 15:02:26 -05:00
|
|
|
|
|
|
|
|
def save(self, for_list):
|
|
|
|
|
self.instance.list = for_list
|
|
|
|
|
return super().save()
|
2026-01-23 22:23:40 -05:00
|
|
|
|
|
|
|
|
class ExistingListItemForm(ItemForm):
|
|
|
|
|
def __init__(self, for_list, *args, **kwargs):
|
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
self.instance.list = for_list
|
|
|
|
|
|
|
|
|
|
def clean_text(self):
|
|
|
|
|
text = self.cleaned_data["text"]
|
|
|
|
|
if self.instance.list.item_set.filter(text=text).exists():
|
|
|
|
|
raise forms.ValidationError(DUPLICATE_ITEM_ERROR)
|
|
|
|
|
return text
|