我用Django 1.6
.
当我有一个具有DateTimeField
类型的字段时,Django
自动使用Django calendar
.
但是在Iran
我们使用Persian Calendar
(或Jalali Calendar
或Farsi Calendar
)。
如何更改 Django 自动生成,因为它Persian calendar
在页面中生成?
另一方面,我想default calendar
用Persian Calendar
?
我用Django 1.6
.
当我有一个具有DateTimeField
类型的字段时,Django
自动使用Django calendar
.
但是在Iran
我们使用Persian Calendar
(或Jalali Calendar
或Farsi Calendar
)。
如何更改 Django 自动生成,因为它Persian calendar
在页面中生成?
另一方面,我想default calendar
用Persian Calendar
?
你可以使用django-jalali-date。在管理站点内轻松将 DateTimeFiled 转换为 JalaliDateTimeField。只能通过继承一个类!
设置.py
INSTALLED_APPS = [
...
'jalali_date',
...
]
视图.py
from jalali_date import datetime2jalali, date2jalali
def my_view(request):
jalali_join = datetime2jalali(request.user.date_joined).strftime('%y/%m/%d _ %H:%M:%S')
模板.html
{% load jalali_tags %}
<p>{{ request.user.date_joined|to_jalali:'%y/%m/%d _ %H:%M:%S' }}</p>
管理员.py
from django.contrib import admin
from jalali_date.admin import ModelAdminJalaliMixin, StackedInlineJalaliMixin, TabularInlineJalaliMixin
class MyInlines1(TabularInlineJalaliMixin, admin.TabularInline):
model = SecendModel
class MyInlines2(StackedInlineJalaliMixin, admin.StackedInline):
model = ThirdModel
@admin.register(FirstModel)
class FirstModelAdmin(ModelAdminJalaliMixin, admin.ModelAdmin):
inlines = (MyInlines1, MyInlines2, )
readonly_fields = ('some_fields', 'date_field',)
只是为了增加接受的答案,JalaliDateField
及其适当的日期选择器也可以在不使用任何 custom 的情况下实现widget
。
首先,您必须指定您DateField
接受其 Jalali 格式的输入。这可以通过这个自定义模型字段来实现
:
from django_jalali.db import models as jmodels
class Order(models.Model):
delivery_date = jmodels.jDateTimeField(verbose_name='تاریخ تحویل')
现在,为了向用户显示日期选择器,您可以使用任何适合您需要的 JavaScript 日期选择器,例如This Bootstrap Datepicker。
假设该字段将显示为 a 的一部分,model form,
您可以指定HTML
id
或class
负责widget
呈现它:
class Order(forms.ModelForm):
class Meta:
model = Order
widgets = {
'delivery_date': forms.DateInput(attrs={'id':'datepicker'}),
}
最后在您的模板中,您只需要初始化日期选择器:
<script>
$(document).ready(function() {
$("#datepicker").datepicker({
minDate: 2,
maxDate: "+10D",
isRTL: true
});
});
</script>
这是它最终的样子:
您可能必须实现自己的自定义小部件——我认为 Django 目前不提供波斯日历小部件。
有一个波斯日期时间小部件的可用代码片段,我可以找到它,但尚未测试。如果它不是一个完美的选择,那么希望它能帮助您编写自己的解决方案。
如果您只需要波斯日期字段(例如生日),这个小代码就可以了
YEAR_CHOICES = range(1377, 1300, -1)
MONTH_CHOICES = {1: 'فروردین',2: 'اردیبهشت',3: 'خرداد',4: 'تیر',5: 'مرداد',6: 'شهریور',7: 'مهر',8: 'آبان',9: 'آذر',10: 'دی',11: 'بهمن',12: 'اسفند'}
class ProfileUpdate(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
def __init__(self, *args, **kwargs):
super(ProfileUpdate, self).__init__(*args, **kwargs)
self.fields['birthday'] = forms.DateField(required=False, widget=extras.SelectDateWidget(empty_label=['سال', 'ماه', 'روز'], years=YEAR_CHOICES, months=MONTH_CHOICES))