我有一个非常奇怪的问题,我现在已经好几天了。
支持会发生什么:用户点击一个URL /视图,该视图具有在我的Payments表中创建新对象的逻辑,然后立即将其保存为外键我的用户表。返回视图的HttpResponse并保留外键(当然)。
ACTUALLY 会发生什么:外键保存没有问题,但一旦功能执行结束就会被删除(特别是从视图返回HttpResponse时)。用户表的外键变为" NULL"在MySQL数据库中。
-
有什么可能的原因?看起来在这里会触发某种类型的回滚。我有一些想法(比如检查自定义中间件),但那些没有产生任何结果。
其他一些警告:
非常感谢任何想法/想法:(
更新:这是我的代码缩短的重新创建:
class CapturePayment(View):
def get(self, request, auth_id, user_id):
pmt = Payment.objects.get(id=auth_id) // get the payment object that was successfully made in prev function
usr = User.objects.get(id=user_id)
usr.payment_fk = pmt // also have tried "usr.payment_fk_id = pmt.id"
usr.save()
// here I do another lookup on the same user to see if this object saved.
check_usr = User.objects.get(id=user_id)
logger.info(check_usr.payment_fk) // shows up in the log with the correct payment object
// HttpResponse returns, but upon checking MySQL database the foreign key is replaced with "NULL" again
return HttpResponse(something)
答案 0 :(得分:0)
完成后提交交易!
检查AUTOCOMMIT是否设置为FALSE ..根据link in the comments ..
通过在其配置中将AUTOCOMMIT设置为False,您可以完全禁用给定数据库的Django事务管理。如果你这样做,Django将不会启用自动提交,并且不会执行任何提交。您将获得底层数据库库的常规行为。
您可能还需要在MySQL中查看此内容。
SHOW GLOBAL VARIABLES WHERE variable_name = 'autocommit';