我正在使用Django 4.0.1。
我有一个"save((被禁止以防止由于未保存的相关对象"page"而导致的数据丢失即使"page"对象保存在前一行。
这是代码:
# Upload entity data
u = Upload(
message=request.POST["upload_msg"]
)
# saving u here to be able to use u.datetime later
u.save()
# new page for the upload entity
page = Page(
title="notes for Upload " + str(u.datetime),
content="This page is empty..."
)
page.save()
u.page = page
u.save()
最后一行(u.save(((是导致错误的一行。我是不是有某种种族状况?在尝试运行下一个数据库之前,是否可以确保前一个数据库操作已经完成还有其他想法吗?
谢谢。
UPDATE
我可以从管理面板中看到Upload和Page实例都创建正确,但Upload实例没有设置Page id。除非我误解了错误消息,否则在调用最后一个u.save((调用时,Page实例不会被保存(或在python"Page"变量内更新(。有什么办法解决这个问题吗?
UPDATE 2
看起来只有当我明确定义主键如下时才会出现此问题:
id = models.IntegerField(primary_key=True, null=False)
这难道不应该在.save((上自动创建实体的id吗?
您正在尝试调用save()
,但没有将其实例存储在u
中并使用commit=False
。这不会影响数据库。它将在进程完成后将实例存储在内存中。您可以保存它。查看有关save((方法的更多信息。
# Upload entity data
u = Upload(
message=request.POST["upload_msg"]
)
# saving u here to be able to use u.datetime later
u = u.save(commit=False)
# new page for the upload entity
page = Page(
title="notes for Upload " + str(u.datetime),
content="This page is empty..."
)
page.save()
u.page = page
u.save()