django-jalali-date icon indicating copy to clipboard operation
django-jalali-date copied to clipboard

استفاده از تاریخ شمسی در لایبرری django_filters.FilterSet

Open zahralizadeh opened this issue 4 years ago • 1 comments

سلام من میخوام از دیت پیکر ( انتخاب گر تاریخ) در فیلتر ست استفاده کنم:

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 avatar Mar 28 '20 17:03 zahralizadeh

سلام، وقت بخیر @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>

لطفا کد لایبرری یاد شده را نیز نگاه کنید تا دقیقا متوجه بشید چه اتفاقی افتاده است.

a-roomana avatar Apr 02 '20 20:04 a-roomana