save()被禁止[..],因为相关对象未保存,但相关对象已保存



我正在使用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()

最新更新