Mongoengine 从 shell 中插入正常,但在 Django 视图中无效

1 投票
2 回答
1311 浏览
提问于 2025-04-16 21:30

我遇到了一个奇怪的情况——在Django的命令行界面中创建Mongoengine对象是成功的,但在Django的视图中创建同样的对象看起来也成功了,但在MongoDB中却没有任何数据出现。也就是说,代码是这样的 -

from myapp.mongomodels import MyModel

m = MyModel(a=1, b=2, c=3)
m.save()

在运行manage.py shell时,这段代码会在MongoDB中插入一个新对象,而在Django视图中运行时却什么都没有。我追踪了代码,发现mongoengine.Document.save()方法运行得很好,没有任何异常。

看起来我可能漏掉了什么明显的东西。

如果能得到任何帮助,我将非常感激。

2 个回答

0

之前我提到过,问题出在我在保存之前就给主键赋了值。

我有一个系统,其中一些数据存储在MySQL里,另一些对应的数据存储在MongoDB里。首先创建MySQL的记录,然后紧接着创建与之相关的MongoDB记录,两个记录的主键值是一样的。因此,pymongo认为这是一个更新请求,而不是插入请求,所以根本没有插入任何记录。

1

你应该可以做到这一点,但需要强制保存,使用以下代码:

from myapp.mongomodels import MyModel

m = MyModel(a=1, b=2, c=3)
m.save(force_insert=True)

撰写回答