ipg/apps/core/utils/jalali_date.py
Sayyid Hamid Mahdavi b8b4f78a22 init
2025-05-10 12:33:40 +03:30

51 lines
2 KiB
Python

from django import forms
from django.conf import settings
from django.templatetags.static import static
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField, SplitDateTimeField, TimeField, DateTimeField
from django.utils.encoding import force_str
from datetime import date as datetime_date, datetime as datetime_datetime
from jdatetime import GregorianToJalali, datetime as jalali_datetime
import jdatetime
class JalaliDateField(DateField):
def __init__(self, *, input_formats=None, **kwargs):
super().__init__(**kwargs)
self.input_formats.insert(0, settings.JALALI_DATE_DEFAULTS['Strftime']['date'])
def prepare_value(self, value):
if isinstance(value, datetime_date):
date_obj = jdatetime.datetime.fromgregorian(datetime=value)
return date_obj.strftime(settings.JALALI_DATE_DEFAULTS['Strftime']['date'])
return value
def strptime(self, value, format):
return jalali_datetime.strptime(force_str(value), format).togregorian().date()
class CustomSelectWidget(forms.widgets.Select):
option_template_name = 'widgets/select_option.html'
class AdminJalaliDateWidget(AdminDateWidget):
template_name = "jalali_date/widgets/date.html"
# @property
# def media(self):
# js = settings.JALALI_DATE_DEFAULTS['Static']['js']
# css = settings.JALALI_DATE_DEFAULTS['Static']['css']
# return forms.Media(js=[static(path) for path in js], css=css)
def __init__(self, attrs=None, format=None):
final_attrs = {'class': 'jalali_date-date', 'size': '10'}
if attrs is not None:
final_attrs.update(attrs)
super(AdminJalaliDateWidget, self).__init__(attrs=final_attrs, format=format)
def render(self, name, value, attrs=None, renderer=None):
"""Render the widget as an HTML string."""
context = self.get_context(name, value, attrs)
return self._render(self.template_name, context, renderer)