from datetime import date, datetime import jdatetime from django.utils import timezone def to_jalali(value): if not value: return None # Keep already-converted Jalali values untouched. if isinstance(value, (jdatetime.datetime, jdatetime.date)): return value if isinstance(value, datetime): if timezone.is_naive(value): value = timezone.make_aware(value, timezone.get_current_timezone()) value = timezone.localtime(value) return jdatetime.datetime.fromgregorian(datetime=value) if isinstance(value, date): return jdatetime.date.fromgregorian(date=value) raise TypeError(f"Unsupported type for to_jalali: {type(value)!r}")