django-jalali-date
django-jalali-date copied to clipboard
استفاده از تاریخ شمسی در لایبرری django_filters.FilterSet
سلام من میخوام از دیت پیکر ( انتخاب گر تاریخ) در فیلتر ست استفاده کنم:
class ShareholderFilter(django_filters.FilterSet):
update_datetime = django_filters.DateFromToRangeFilter(widget=django_filters.widgets.RangeWidget(attrs={'type': 'date'}))
class Meta:
model = company_shareholder
fields = ['update_datetime']
def __init__(self, *args, **kwargs):
super(ShareholderFilter, self).__init__(*args, **kwargs)
# self.filters['update_datetime'] = JalaliDateField(widget=AdminJalaliDateWidget)؟؟؟؟؟؟؟؟
self.filters['update_datetime'].label="تاریخ بروزرسانی از"
ممنون میشم راهنمایی کنید؟
سلام، وقت بخیر @zahralizadeh
برای این کار شما باید فیلدهای تاریخ رو مثل حالت زیر بازنویسی کنید. چون جنبه آموزشی نیز داشت این کد رو در این جا قرار دادم.
import django_filters
from django import forms
from django_filters.fields import DateRangeField
from django_filters.widgets import DateRangeWidget, SuffixedMultiWidget
from jalali_date.fields import JalaliDateField, SplitJalaliDateTimeField
from jalali_date.widgets import AdminJalaliDateWidget, AdminSplitJalaliDateTime
from .models import One
class JalaliDateRangeWidget(DateRangeWidget):
def __init__(self, attrs=None):
widgets = (AdminJalaliDateWidget, AdminJalaliDateWidget)
super(SuffixedMultiWidget, self).__init__(widgets, attrs)
class JalaliDateRangeField(DateRangeField):
widget = JalaliDateRangeWidget
def __init__(self, *args, **kwargs):
fields = (
JalaliDateField(),
JalaliDateField()
)
super(DateRangeField, self).__init__(fields, *args, **kwargs)
class JalaliDateFromToRangeFilter(django_filters.DateFromToRangeFilter):
field_class = JalaliDateRangeField
class OneFilter(django_filters.FilterSet):
date = JalaliDateFromToRangeFilter(label='تاریخ')
class Meta:
model = One
fields = ['date']
<form method="get">
{{ filter.form.media }}
{{ filter.form.as_p }}
<input type="submit" value="فیلتر"/>
</form>
لطفا کد لایبرری یاد شده را نیز نگاه کنید تا دقیقا متوجه بشید چه اتفاقی افتاده است.