Jalali Date support for Django model and admin interface
Project description
This module gives you a DateField same as Django’s DateField but you can get and query data based on Jalali Date
Status
Dependencies
Django > 2.2
Looking for Django 1.X support? Checkout 2.4.6 version in pypi.org
Django REST Framework > 3.12 (If install with drf dependency)
Install
pip install django_jalali
To use DRF serializer field:
pip install django_jalali[drf]
Usage
Run :
$ django-admin startproject jalali_test
Start your app :
$ python manage.py startapp foo
Edit settings.py and add django_jalali and your foo to your INSTALLED_APPS (also config DATABASES setting)
django_jalali should be added before your apps in order to work properly
Edit foo/models.py
from django.db import models
from django_jalali.db import models as jmodels
class Bar(models.Model):
objects = jmodels.jManager()
name = models.CharField(max_length=200)
date = jmodels.jDateField()
def __str__(self):
return "%s, %s" % (self.name, self.date)
class BarTime(models.Model):
objects = jmodels.jManager()
name = models.CharField(max_length=200)
datetime = jmodels.jDateTimeField()
def __str__(self):
return "%s, %s" % (self.name, self.datetime)
Run
$ python manage.py makemigrations
Migrations for 'foo':
foo/migrations/0001_initial.py:
- Create model Bar
- Create model BarTime
$ python manage.py migrate
Running migrations:
Applying foo.0001_initial... OK
Test it
$ python manage.py shell
Python 3.7.0 (default, Nov 26 2018, 15:26:54)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from foo.models import Bar
>>> import jdatetime
>>> today = jdatetime.date(1390, 5, 12)
>>> mybar = Bar(name="foo", date=today)
>>> mybar.save()
>>> mybar.date
jdatetime.date(1390, 5, 12)
>>> Bar.objects.filter(date=today)
[<Bar: foo, 1390-05-12>]
>>> Bar.objects.filter(date__gte="1390-5-12")
[<Bar: foo, 1390-05-12>]
>>> Bar.objects.filter(date='1363-8-01')
[]
>>> from foo.models import BarTime
>>> BarTime(name="Bar Time now", datetime=jdatetime.datetime(1380,8,2,12,12,12)).save()
>>> BarTime.objects.filter(datetime__lt= jdatetime.datetime(1380,8,2,12,12,12 ))
[]
>>> BarTime.objects.filter(datetime__lte= jdatetime.datetime(1380,8,2,12,12,12 ))
[<BarTime: Bar Time now, 1380-08-0212:12:12>]
>>> BarTime.objects.filter(datetime__gt='1380-08-02')
[<BarTime: Bar Time now, 1380-08-0212:12:12>]
>>> BarTime.objects.filter(datetime__gt=d)
[]
>>> BarTime.objects.filter(datetime__year=1380)
[<BarTime: Bar Time now, 1380-08-0212:12:12>]
Admin Interface
Create foo/admin.py
from foo.models import Bar, BarTime
from django.contrib import admin
from django_jalali.admin.filters import JDateFieldListFilter
# you need import this for adding jalali calander widget
import django_jalali.admin as jadmin
class BarAdmin(admin.ModelAdmin):
list_filter = (
('date', JDateFieldListFilter),
)
admin.site.register(Bar, BarAdmin)
class BarTimeAdmin(admin.ModelAdmin):
list_filter = (
('datetime', JDateFieldListFilter),
)
admin.site.register(BarTime, BarTimeAdmin)
Config admin interface and fire up your django and enjoy using jalali date !
Django rest framework
There are serializer fields corresponding to jmodels.JDateField and jmodels.JDateTimeField for DRF:
from django_jalali.serializers.serializerfield import JDateField, JDateTimeField
from rest_framework.serializers import ModelSerializer
from foo.models import Bar, BarTime
class JDateFieldSerialializer(ModelSerializer):
date = JDateField()
class Meta:
model = Bar
exclude = []
class JDateTimeFieldSerializer(ModelSerializer):
datetime = JDateTimeField()
class Meta:
model = BarTime
exclude = []
Locale
In order to get the date string in farsi you need to set the locale to fa_IR
There are two ways to do achieve that, you can use of the approaches based on your needs
Run server with LC_ALL env:
$ LC_ALL=fa_IR python manage.py runserver
Set the locale in settings.py
LANGUAGE_CODE = 'fa-ir'
import locale
locale.setlocale(locale.LC_ALL, "fa_IR.UTF-8")
Timezone Settings
From django_jalali version 3 and Django 2 you can use TIME_ZONE and USE_TZ settings to save datetime with project timezone
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_jalali-4.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 675b57a90ebbe14e9e7711135f60d148fff3330aa0a916e00fefec881a9a0c11 |
|
MD5 | 8f58580cf8746a8212ee4debef38b251 |
|
BLAKE2b-256 | c5fed880d5bc3d8af384bd3bfa155d1b7f6a7559c3c58a55b42777547f45f4ef |