from django import forms from .models import Expense class ExpenseForm(forms.ModelForm): amount = forms.CharField( widget=forms.TextInput( attrs={ "class": "input input-bordered w-full", "placeholder": "0,00", "inputmode": "decimal", } ) ) class Meta: model = Expense fields = ["concept", "amount", "category", "subcategory"] widgets = { "concept": forms.TextInput( attrs={ "class": "input input-bordered w-full", "placeholder": "Expense description", } ), "category": forms.Select( attrs={ "class": "select select-bordered w-full", "data-liveview-function": "update_subcategories", "data-action": "change->page#run", } ), "subcategory": forms.Select( attrs={ "class": "select select-bordered w-full", } ), } def clean_amount(self): from decimal import Decimal, InvalidOperation value = self.cleaned_data["amount"].replace(",", ".") try: amount = Decimal(value) except (InvalidOperation, ValueError): raise forms.ValidationError("Enter a valid amount.") if amount <= 0: raise forms.ValidationError("Amount must be greater than zero.") return amount