将字段值添加到Django中的日期字段

时间:2018-08-16 09:24:47

标签: django django-models django-queryset

父级模型:

id = auto_generated
add_me = IntegerField()

子模型:

id = ForeignKey(Parent)
my_date= DateTime(auto_now_add=True)

today = django.util.timezone.now()
time = today - timedelta(days=10)

现在我要检索记录为:

child.objects.filter(my_date__lte= time + 
(timedelta(days=1)*F('id__add_me')))

一切正常

(timedelta(days=1)*F('id__add_me'))

我正在使用 MYSQL : 我得到:

django.db.utils.ProgrammingError:
 (1064, "You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL
 server version for the right syntax to use near
 '* `parent`.`add_me`))))' at line 1")

生成的查询类似于:

SELECT*  FROM `child INNER JOIN `parent` ON
 (`child`.`id` = `parent`.`id`) WHERE
  ( `child`.`my_date` <= ((2018-07-30 09:11:18.670900 
  + (INTERVAL '86400.000000' SECOND_MICROSECOND * `parent`.`add_me`))))

如您所见,*INTERVAL(乘法)一起使用。
我将parentadd_me放在INTERVAL内进行了硬编码查询,并正确了,
如何通过Django做到这一点?即DATE_ADD在django中

我想从datetime字段减少天数,该天数存储在主表字段中。
也许它不适用于MYSQL,所以请提供一种替代解决方案。

已更新:

以某种方式通过将 MYSQL 查询编写为:

SELECT * FROM child INNER JOIN parent ON" \
child.id = parent.id WHERE
child.my_date<= '" + str(time) + \
"' + INTERVAL parent.add_me DAY "

问题在于单引号('),即mysql中的<=中的datetime应该在单引号内,否则将不起作用。即
2018-07-30 09:11:18.670900应写为
'2018-07-30 09:11:18.670900'(如果添加了INTERVAL
但是,由于查询是由Django生成的,我该如何实现?

0 个答案:

没有答案