2017-08-30 44 views
0

我正在尋找一種方式/功能/法,使之不可能挽救兩個相同的名字在我的JSON,例如,我得到這個JSON反覆名稱:在JSON與MongoEngine避免重複的名字 - Python的

[ 
    [ 
    { 
     "id": "59a5c80dc75969297837c51e", 
     "name": "uza", 
     "password": "3648726" 
    }, 
    {} 
    ], 
    [ 
    { 
     "id": "59a5c811c75969297837c51f", 
     "name": "kuza", 
     "password": "3648726" 
    }, 
    {} 
    ], 
    [ 
    { 
     "id": "59a5c83ec75969297837c520", 
     "name": "kuza", 
     "password": "3648726" 
    }, 
    {} 
    ] 
] 

我創建一個用戶代碼是這一個:

@api.route('/', methods=['POST']) 
def create(): 

# Grabs the data from the requisition 
user_json = request.get_json(silent=True) 
if not user_json: 
    return "FAIL" 

# creates an entity JSON 
user, errors = schema.load(user_json) 
if bool(errors): 
    return jsonify(errors) 
    user.save() 
return "SUCCESS" 

我再次使用mongoengine,任何人知道該怎麼辦呢?

編輯補充我model.py

rom mongoengine import Document 
from mongoengine import StringField, ReferenceField 

import marshmallow_mongoengine as ma 

from marshmallow import Schema, fields 

from .service import ImageService 

class User(Document): 
    name = StringField(unique=True) 
    password = StringField(unique=True) 

class Face(Document): 
    user = ReferenceField(User) 
    image = StringField() 
    embedding = StringField() 

    def get_embedding(self): 
     return ImageService().from_base64_flat(self.embedding.encode()) 

    def get_image(self): 
     return ImageService().from_base64(self.image.encode()) 

class UserSchema(ma.ModelSchema): 
    class Meta: 
     model = User 

class FaceSchema(ma.ModelSchema): 
    class Meta: 
     model = Face 

    image = ma.fields.Method(deserialize="img_to_base64", serialize="img_to_base64") 
    embedding = ma.fields.Method(deserialize="to_base64", serialize="to_base64") 

    def img_to_base64(self, data): 
     return ImageService().to_base64(data) 

    def to_base64(self, data): 
     return ImageService().np_to_base64(data) 

在類用戶,我改變它需要獨特的,現在我不能添加一個具有相同的名稱,但作爲交換它返回一個內部服務器錯誤在失眠,正如你可以看到我把另一個獨特的密碼進行測試,它不起作用,即使有另一個用戶使用相同的密碼,它也會保存。

+0

您當前的錯誤或問題? –

+0

名稱重複。我需要它不保存重複的名字。 –

+0

您可以發佈您使用過的模式嗎? –

回答

0

試試這個

class User(Document): 
    name = StringField(unique=True) 
    password = StringField(unique=True) 
    meta = {  
     'indexes': [{'fields': ['name'], 'unique': True}] 
    } 
+0

謝謝,但我認爲這是我的ide竊聽,現在一切正常工作oO –