父级模型:
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
(乘法)一起使用。
我将parent
。add_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生成的,我该如何实现?