Django DateRangeField问题

时间:2016-11-23 02:08:32

标签: python django postgresql

我在使用Forms插入数据库DateRangeField时遇到问题。

model.py

from django.contrib.postgres.fields import DateRangeField
from django.db import models

class Event(models.Model):
    name = models.CharField(max_length=200)
    datefromto = DateRangeField() 

views.py

date_from = '2011-01-01'
date_to = '2011-01-31'
data = {
    "name" : "Test Name",
    "datefromto" : [date_from,date_to ]
}

form = Event_form(data)
if form.is_valid():
    form.save()
else:
    print(form.errors)

forms.py

class Event_form(forms.ModelForm):
    class Meta:
        model = Event
        fields = ('name','datefromto')

    def clean(self):
        print(self.cleaned_data)
        #{"name" : "Test Name"} there should be 'datefromto' key

当我调用 form.is_valid()时,它返回" datefromto是必需的" 它不应该是这样的,因为那里&# 39; sa' datefromto'在字典里面。当我尝试在表单清理函数中打印cleaning_data时,它只打印 {" name" :"测试名称"} ,不带 datefromto 键。

Django 1.9,Python 2.7和Postgre 9.3.14。

1 个答案:

答案 0 :(得分:3)

在深入了解django源代码之后,你应该为范围字段添加number suffix,如下所示:

date_from = '2011-01-01'
date_to = '2011-01-31'
data = {
    "name" : "Test Name",
    "datefromto_0" : date_from,
    "datefromto_1" : date_to
}

form = Event_form(data)
if form.is_valid():
    form.save()
else:
    print(form.errors)

我使用pdb跟踪django中的代码,发现了这个技巧......

当你下次遇到django中的其他问题时,你可以利用pdb来追踪。它真的是一个很好的python调试工具......

希望它会有所帮助...... :)。