一尘不染

DateTimeField查询集在Django中返回None

python

我试图创建一个查询集以获取DateTimeField的值,该值是数据库中的DATETIME。

models.py中的类:

class ChangeMetrics(models.Model):
    id = models.IntegerField(primary_key=True)
    file_id = models.ForeignKey(File, db_column = 'file_id')
    version_id = models.ForeignKey(Version, db_column = 'version_id')
    function_id = models.ForeignKey(Function, blank=True, db_column = 'function_id')
    date = models.DateTimeField(blank=True, null=True)
    user = models.TextField(blank=True)
    changed = models.IntegerField(blank=True, null=True)

数据库中的字段:

date DATETIME

元组已填充到数据库中,并且直接在DB上运行SQL查询运行良好。

这是我当前在Django中使用的查询集:

queryset = ChangeMetrics.objects.filter(~Q(changed=None), ~Q(date=None), ~Q(version_id=None))

我已经尝试过原始查询以及使用exclude()的查询版本,但是对于日期仍然返回None。

我正在通过for循环访问queryset中的条目,并且仅通过for循环内的entry.date访问日期。

编辑:Django版本1.6.5我也尝试过通过Django shell获取值,但没有成功。

有什么想法可能有问题吗?


阅读 502

收藏
2021-01-20

共1个答案

一尘不染

不知道您是否能够解决这个问题,但是我遇到了这个问题并能够解决。

因此,Django迁移正在数据库中将列创建为datetime(6)而不是datetime。这导致Django模型无法实例化Datetime对象。

ALTER TABLE `my_table` 
MODIFY COLUMN `created` datetime NOT NULL

运行后,如果解决了我的问题。也许在您的情况下,您可以尝试修改为datetime(6)。

2021-01-20