Mongoengine create_user函数生成null objectId

时间:2013-07-02 17:09:48

标签: django mongoengine

在我将单个用户添加到数据库后,似乎总是得到完全相同的错误。

Tried to save duplicate unique keys (E11000 duplicate key error index: mydb.user.$objectId_1  dup key: { : null })

奇怪的是,我从测试套件中完全复制了代码,即使这样也行不通。我查看堆栈跟踪,并且有问题的问题总是在同一个地方

/usr/local/lib/python2.7/dist-packages/mongoengine/django/auth.py in set_password
264. self.save()

令人难以置信的是令人沮丧的是,我在过去两天基本上都在看这个。这不是我的代码中的东西。由于某种原因,它似乎没有生成ObjectId,因为它始终为null。我甚至不明白为什么会这样呢

我的代码只是

from mongoengine.django.auth import User
from django.contrib.auth import get_user_model

    user_data = {
        'username': 'user',
        'email': 'user@example.com',
        'password': 'test',
    }
    manager = get_user_model()._default_manager
    user = manager.create_user(user_data)

1 个答案:

答案 0 :(得分:0)

看起来您在objectId字段上有一个额外的索引是唯一的

创建一个新用户时,它没有设置一个objectId字段值,并且由于它的唯一性,你不能有两个没有值的文档(因为它不是一个稀疏索引)。

在mongo shell中测试:

> use mydb
> db.user.getIndexes()

删除objectId_1索引:

> db.user.dropIndex("objectId_1")
> db.user.getIndexes()