51 lines
2 KiB
Python
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)
|
|
|
|
|