我对DateRangeField有疑问使用表单插入数据库。
模型.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 is required”,它不应该是这样的,因为字典中有一个“datefromto”。当我尝试在表单 clean 函数中打印 clean_data 时,它仅打印 {"name": "Test Name"} ,而没有 datefromto 键。
Django 1.9、Python 2.7 和 Postgre 9.3.14。
最佳答案
深入研究 django 源代码后,您应该为范围字段添加数字后缀
,如下所示:
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调试工具...
希望它会有所帮助...:)。
关于python - Django DateRangeField 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754888/