NotUniqueError с использованием django и mongoengine
Я использую 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: Попытка сохранить дублирующиеся уникальные ключи (E11000 коллекция ошибок дубликатов ключей: project.client index: UUID_1 dup key: {: null })
Я застрял здесь. Пожалуйста, скажите мне, где я ошибся, так как я новичок в django. Любая помощь будет высоко ценится.
2 ответа
Вам нужно установить default как функцию: попробуйте удалить скобки:
uuid = fields.UUIDField(default=uuid.uuid4())
# ^^^
в
uuid = fields.UUIDField(default=uuid.uuid4)
# ^^^
и попробуйте в сериализаторе, явно объявив поле uuid:
class ClientSerializer(mongoserializers.DocumentSerializer):
uuid = serializers.UUIDField()
Django - это веб-фреймворк, основанный на реляционном бэкэнде (например, sql) для сохранения всех своих моделей. С другой стороны, MongoEngine - это оболочка ORM для MongoDB. Django имеет свою собственную оболочку типа ORM в виде моделей.
Чтобы использовать Django с MongoEngine, либо попробуйте Django-nonrel, либо попробуйте djongo, который соединяет реляционный Django с MongoDB.
Использование моделей Django с MongoEngine не всегда будет работать. В качестве альтернативы лучше использовать MongoEngine ORM для сохранения ваших моделей.