24

我用Django 1.6.

当我有一个具有DateTimeField类型的字段时,Django自动使用Django calendar.

但是在Iran我们使用Persian Calendar(或Jalali CalendarFarsi Calendar)。

如何更改 Django 自动生成,因为它Persian calendar在页面中生成?

另一方面,我想default calendarPersian Calendar?

在此处输入图像描述

4

4 回答 4

12

你可以使用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',)

结果的例子!

于 2016-07-27T22:39:13.633 回答
11

只是为了增加接受的答案,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 idclass负责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>

这是它最终的样子:
贾拉利日期选择器

于 2015-04-15T13:28:12.937 回答
9

您可能必须实现自己的自定义小部件——我认为 Django 目前不提供波斯日历小部件。

一个波斯日期时间小部件的可用代码片段,我可以找到它,但尚未测试。如果它不是一个完美的选择,那么希望它能帮助您编写自己的解决方案。

于 2013-11-29T19:28:45.343 回答
1

如果您只需要波斯日期字段(例如生日),这个小代码就可以了

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))
于 2017-04-30T17:28:10.930 回答