Python 如何使用波斯日历更改Django日历的类型?
我使用的是Django 1.6 当我有一个包含Python 如何使用波斯日历更改Django日历的类型?,python,django,persian-calendar,Python,Django,Persian Calendar,我使用的是Django 1.6 当我有一个包含datetime字段类型的字段时,Django会自动使用Django日历 但是在伊朗我们使用的是波斯日历(或者贾拉利日历或者波斯语日历) 如何更改Django自动生成,因为它在第页中生成波斯日历 另一方面,我想用波斯日历更改默认日历 您可能需要实现自己的日历-我认为Django目前还没有提供波斯日历小部件 有一个可用的,我可以找到,但尚未测试。如果它不是一个完美的选择,那么希望它能帮助您编写自己的解决方案。只需添加到公认的答案中,Jalali日期字段
datetime字段
类型的字段时,Django
会自动使用Django日历
但是在伊朗我们使用的是波斯日历(或者贾拉利日历
或者波斯语日历
)
如何更改Django自动生成,因为它在第页中生成波斯日历
另一方面,我想用波斯日历
更改默认日历
您可能需要实现自己的日历-我认为Django目前还没有提供波斯日历小部件
有一个可用的,我可以找到,但尚未测试。如果它不是一个完美的选择,那么希望它能帮助您编写自己的解决方案。只需添加到公认的答案中,Jalali
日期字段及其相应的日期选择器也可以在不使用任何自定义小部件的情况下实现
首先,必须指定DateField
,以接受Jalali格式的输入。这可以通过以下方式实现:
:
现在,为了向用户显示日期选择器,您可以使用任何符合您需要的javascript日期选择器,例如。
假设该字段将作为模型表单的一部分显示,
您可以指定负责呈现该字段的小部件的HTML
id
或类
:
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>
$(文档).ready(函数(){
$(“#日期选择器”)。日期选择器({
minDate:2,
最大日期:“+10D”,
是的
});
});
下面是它最终的样子:
您可以使用。在管理站点内轻松将DateTimeFiled转换为JalaliDateTimeField。只有继承一个类
设置.py
INSTALLED_APPS = [
...
'jalali_date',
...
]
views.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')
template.html
{% load jalali_tags %}
<p>{{ request.user.date_joined|to_jalali:'%y/%m/%d _ %H:%M:%S' }}</p>
如果您只需要波斯日期字段(例如生日),这个小代码就可以了
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))
你是怎么做到的?我想做同样的事情。请解释如何在模型、视图和templates@Arman您能解释一下如何通过这个包在模型中实现日期字段吗。我想知道如何将发布的值作为日期或日期时间字段存储在数据库中。它会在第二个月的第31个月引发问题。有什么解决办法吗?
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',)
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))