如何在MongoEngine Flask中附加到EmbeddedDocumentListField?

问题描述

我正在尝试将其他信息附加到现有列表中,但我收到了一条错误消息。

错误:4。无效的嵌入式文档实例提供给 EmbeddedDocumentField:['family']

class Family(db.EmbeddedDocument):
    name = db.StringField()
    # gender = db.StringField()

class House(db.Document):
    house_id = db.IntField(required=True,unique=True)
    housingType = db.StringField(required=True)
    family = db.EmbeddedDocumentListField(Family)

    def to_json(self):
        return {
            "house_id": self.house_id,"housingType": self.housingType,"family_members": self.family
        }


@app.route('/api/add_family/<h_id>',methods=['POST'])
def add_family(h_id):
    content = request.json
    h = House.objects(house_id=h_id).get()
    h.family.append(content['family'])
    h.save()
    return make_response("Added family member successfully",201)

我要实现的目标如下:

Current data:

{
  'house_id': 1,'family': [{'name': 'John','Gender': 'Male'}]
}


After appending,it should look like this:

{
  'house_id': 1,'family': [{'name': 'John,'Gender': 'Male'},{'name': 'Peter','Gender': 'Male'}]
}

解决方法

这是我的解决方案。希望它会有所帮助。

@app.route('/api/add_family/<h_id>',methods=['POST'])
def add_family(h_id):
    '''
    family member is added only if its not already in the database
    '''
    edited = False
    content = request.json
    h = House.objects.get(house_id=h_id).to_json()
    h = json.loads(h)
    family_arr = h['family']
    if family_arr:
        # family_arr not empty
        count = family_arr[-1].get('id') + 1
    else:
        count = 1

    for new_name in content['family']:
        if not dup_name_check(family_arr,new_name['name']):
            new_name.update({'id': count})
            family_arr.append(new_name)
            count += 1
            edited = True

    if edited:
        House.objects.get(house_id=h_id).update(family=family_arr)
        return make_response(f"Successfully added family member in House ID:{h_id}",201)
    else:
        return make_response(f"Duplicated entries detected!",400)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...