2

我正在使用django和mongoengine。 这是当我尝试使用.save()方法保存新创建的实例时,我一次又一次得到的错误。我能够首次创建模型实例,但在此之后,任何发布请求都会引发此错误。 这里是我的文档结构:使用django和mongoengine的NotUniqueError

class Client(DynamicDocument): 
    name = fields.StringField(required=True,max_length=30) 
    uuid = fields.UUIDField(default=uuid.uuid4()) 
    contactEmail = fields.EmailField(required=True,max_length=30) 
    contactPhone = fields.StringField(required=True,max_length=30) 
    contactPerson = fields.StringField(required=True,max_length=30) 

class ClientSerializer(mongoserializers.DocumentSerializer): 

    class Meta: 
     model = Client 
     fields = ('id','name','uuid','contactEmail','contactPhone','contactPerson') 

这里的地方想提出POST请求:

def post(self, request, format=None): 
    serializer = ClientSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status=status.HTTP_201_CREATED) 
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

但我捕获错误:

NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error collection: project.client index: UUID_1 dup key: { : null }) 

我坚持here.Please告诉我在哪里我是错误的,因为我是django的noob。任何帮助将不胜感激。

回答

1

哟需要设置默认的功能: 尝试删除括号:

uuid = fields.UUIDField(default=uuid.uuid4()) 
#           ^^^ 

uuid = fields.UUIDField(default=uuid.uuid4) 
#          ^^^ 

,并尝试在串行,显式声明UUID字段:

class ClientSerializer(mongoserializers.DocumentSerializer): 
    uuid = serializers.UUIDField() 
+0

我试过这样做,没有任何区别。感谢回复:) –

+0

你可以显示你的'request.data'吗?请将其添加到问题 –

+0

{u'contactEmail':u'[email protected]',u'contactPhone':u'7878787878',u'name':u'bournc',u'contactPerson':u'singh '} 这是我的请求。数据 –

0

的Django是一个基本依赖关系后端(例如sql)的web框架保存所有型号。另一方面,MongoEngine是一个围绕MongoDB的ORM包装。 Django以模型的形式拥有自己的ORM类型包装器。

要使用Django和MongoEngine,可以尝试使用Django-nonrel或尝试djongo,它将关系Django连接到MongoDB。

在MongoEngine中使用Django模型不会总是有效。另外最好使用MongoEngine ORM来保存模型。

相关问题