Родительская модель:
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, как мне этого добиться?
🤔 А знаете ли вы, что...
Django предоставляет инструменты для тестирования приложений и автоматического тестирования.