Files
WYGIWYH/app/apps/transactions/fields.py
Herculino Trotta 50b0c6ce01 initial commit
2024-09-26 11:00:40 -03:00

47 lines
1.4 KiB
Python

import datetime
from django import forms
from django.db import models
from django.core.exceptions import ValidationError
from apps.transactions.widgets import MonthYearWidget
class MonthYearField(models.DateField):
def to_python(self, value):
if value is None or isinstance(value, datetime.date):
return value
try:
# Parse the input as year-month
date = datetime.datetime.strptime(value, "%Y-%m")
# Set the day to 1
return date.replace(day=1).date()
except ValueError:
raise ValidationError("Invalid date format. Use YYYY-MM.")
def formfield(self, **kwargs):
kwargs["widget"] = MonthYearWidget
kwargs["form_class"] = MonthYearFormField
return super().formfield(**kwargs)
class MonthYearFormField(forms.DateField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.input_formats = ["%Y-%m"]
def to_python(self, value):
if value in self.empty_values:
return None
try:
date = datetime.datetime.strptime(value, "%Y-%m")
return date.replace(day=1).date()
except ValueError:
raise ValidationError("Invalid date format. Use YYYY-MM.")
def prepare_value(self, value):
if isinstance(value, datetime.date):
return value.strftime("%Y-%m")
return value