问题描述
我正在尝试将其他信息附加到现有列表中,但我收到了一条错误消息。
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)