python - Django DateRangeField 问题

标签 python django postgresql

我对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/

相关文章:

ruby - 如何使用 PG gem 解码 JSON 字段?

postgresql - 限制 RDS PostgreSQL 9.6 中新创建用户的创建表权限

mysql - 从django中的不同主机访问数据库

python - Django orm 为每个组获取最新信息

sql - PostgreSQL - 使第一行显示为其他行的总和

python - 哪种编程语言或库可以处理 Infinite Series?

python - 加密字符串以获得固定长度

python - 快速任意分布随机采样(逆变换采样)

Python多线程-同时播放多个正弦波

python - 使用多个并行线程分部分下载大文件