Как изменить тип Django Calendar с персидским календарем?
Я использую Django 1.6
.
Когда у меня есть поле с типом DateTimeField
, Django
автоматически используйте Django calendar
.
Но в Iran
мы используем Persian Calendar
(или Jalali Calendar
или Farsi Calendar
).
Как я могу изменить генерацию генерации Django, потому что она генерирует Persian Calendar
на странице?
В другой руке мне нужно изменить default calendar
на Persian Calendar
?
![enter image description here]()
Ответы
Ответ 1
Вам, скорее всего, придется реализовать свой собственный пользовательский виджет - я не думаю, что Django предоставляет виджет с персидским календарем в этот момент времени.
Существует доступный фрагмент кода для виджета Persian DateTime, который я смог найти, но еще не проверил. Если это не идеально подходит, то, надеюсь, это поможет вам написать собственное решение.
Ответ 2
Чтобы добавить к принятому ответу, Jalali DateField
с соответствующим выбором даты также может быть реализован без использования каких-либо пользовательских widget
.
Сначала вы должны указать свой DateField
, чтобы принять его ввод в формате Jalali. Это может быть достигнуто с помощью этого настраиваемого поля модели
:
from django_jalali.db import models as jmodels
class Order(models.Model):
delivery_date = jmodels.jDateTimeField(verbose_name='تاریخ تحویل')
Теперь, для отображения выбора даты для пользователя, вы можете использовать любой желаемый javascript date picker, который соответствует вашим потребностям, что-то вроде This Bootstrap Datepicker.
Предполагая, что поле будет отображаться как часть 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>
Вот как это было бы выглядеть в конце:
![Jalali Date Picker]()
Ответ 3
вы можете использовать django-jalali-date. Простое преобразование DateTimeFiled в JalaliDateTimeField в админ-сайт. только по наследованию класса!
settings.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>
admin.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',)
![пример результата!]()
Ответ 4
Если вам просто нужен персидский DateField (например, для дня рождения), этот крошечный код сделает это
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))