问题描述
这是我的数据结构:
{
house_id : 1,houseType : "condo",family: [
{'name': "pete","gender": "male",etc},{'name': "jon",etc}
]
}
如何从EmbeddedDocumentListField中删除“宠物”?
db = MongoEngine()
db.init_app(app)
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)
@app.route('/api/del_member/<h_id>/<fam_name>',methods=['DELETE'])
def del_member(h_id,fam_name):
try:
h = House.objects.get(house_id=h_id)
t = h.family.get(name=fam_name)
return make_response(jsonify(t),200)
except Exception:
return make_response(f'Something went wrong trying to delete '
f'Member: {fam_name} in House ID: {h_id}',500)
im可以选择我感兴趣的项目,但我无法删除它。我试过.delete()但说错了
t = h.family.get(name = fam_name).delete()
AttributeError:“家庭”对象没有属性“删除”
弹出。
解决方法
我找到了解决方案。可能不是最好的,但它可以工作。希望有人可以对此进行改进。
@app.route('/api/del_member/<h_id>/<fam_name>',methods=['DELETE'])
def del_member(h_id,fam_name):
h = House.objects.get(house_id=h_id).to_json()
h = json.loads(h)
family = h['family']
new_family = family.copy()
for i in range(len(family)):
name = family[i].get('name')
if name == fam_name:
del new_family[i]
break
House.objects.get(house_id=h_id).update(family=new_family)
return make_response('',200)