django - 使用 django 和 mongoengine 时出现 NotUniqueError

标签 django django-rest-framework django-mongodb-engine restframeworkmongoengine

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

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')

这是我发出帖子请求的地方:

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 })

我被困在这里。请告诉我哪里出了问题,因为我是 django 新手。任何帮助将不胜感激。

最佳答案

您需要将默认值设置为函数: 尝试删除括号:

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

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

并尝试在序列化器中显式声明 uuid 字段:

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

关于django - 使用 django 和 mongoengine 时出现 NotUniqueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45875779/

相关文章:

django - 将 'yesterday' 字段添加到 Django 管理日期列表过滤器

html - 如何操作输入框的位置?

python - 如何使特定模型类的 Django contrib Admin 更改列表可编辑,并包含列表中显示的相关项目的下拉列表?

django - 为什么模型 ID 不总是 Postgres/Django 中的下一个递增数字?

Django REST Framework 不拦截 404 异常并输出 HTML 而不是 JSON

python - 如何使用 Django Rest Framework JSON API 包含相关资源?

python - django.core.exceptions.ImproperlyConfigured : 'django_mongodb_engine' isn't an available database backend

python - 如何与Django REST框架连接到前端

python - 如何在模型方法字段(不是模型字段)上对 Django 管理列进行排序

django - unique_together 在 Django-nonrel 中如何工作?