模型自动转换字段?

时间:2016-10-23 09:11:10

标签: django python-3.x

我可以拥有一个模型,可以在Greogorian中保存数据库中的日期,但可以在Jalali中获取和显示。 jdatetime非常好,但django_jalali使用jdatetime作为django并不是一个很酷的文档。所以我只想使用jdatetime。

使用jdatetime我可以转换日期。

from jdatetime import date as jdate
from datetime import date
#get jalali date from gregorian
jd = jdate.fromgregorian(date=date.today())
#get gregorian date from jalali
gd = jd.togregorian()

我应该在表格中找到日期。使用commit = False是好主意但是如果我使用FormModel会怎样?

转换为jalali是通过模板标记完成的:

from jdatetime import date as jdate
def tojalali(value, arg=None):
    d = jdate.fromgregorian(date=value)
    return str(d.year) + '/' + str(d.month) + '/' + str(d.day)

register.filter('tojalali',tojalali)

如何在Form中使用jalali获取日期并使用ModelForm将其转换为模型?

1 个答案:

答案 0 :(得分:0)

你应该扩展标准的Django Date Widget,并覆盖 format_value (用于从DB检索gregorian并显示jalali。)和 get_value_from_data_dict 方法。

这样的东西
class CategoryWidget(forms.TextInput):
    def __init__(self,attrs=None):
        super(CategoryWidget, self).__init__(attrs)
    def value_from_datadict(self, data, files, name):
        #Your Code to process from jalali to gregorian.

   def format_value(self, value):
        #Your Code to process from gregorian to jalali.

Detailed Tutorial Django Docs

我建议您同时编写一个小部件以及渲染方法,因为jalali日历会有所不同,您需要一个不同的日历小部件。然后覆盖这两个方法。 然后,您可以指定在该字段的模型表单上使用哪个窗口小部件。