我最终通过制作一个原始插入物来解决这个问题(
connections['default'].cursor().execute('INSERT INTO myproject.myapp_thing (...) ON DUPLICATE KEY UPDATE...')
但仍然想知道为什么问题的代码不起作用。
问题是
Thing
模型包含另一个字段:位于
code
查菲尔德/PK和
created
日期(实际上在我的用例中
last_accessed
)还有另一个约会(想想
modified
)使用
default=None, null=True
我假设如果我没有显式地包含在原始查询中,将使用默认值。
显然,这个假设是错误的,Django试着
t.save
,以查找
被改进的
在DB中,它最初来自—但失败了,因为它来自原始SQL查询。
如果我包括
,NULL AS 'modified'
在原始SQL查询中,原始错误消失了
但我仍然无法合理地将Django逻辑用于我的用例,因为
t.save(using='default')
会对现有的东西进行更新
上次访问的\u
和
覆盖
被改进的
日期为NULL,我不想要,并且
t.save(using='default', update_fields=['last_accessed'])
将
force an update
因此在新事物上失败了
.