我在使用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。
答案 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调试工具......