如何附加到MongoEngine中的EmbeddedDocumentListField?

2024-09-29 18:57:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在现有列表中添加其他信息,但收到了一条错误消息

Error: 4.Invalid embedded document instance provided to an 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'}]
}

Tags: tonameselfidtruedbgenderfamily
1条回答
网友
1楼 · 发布于 2024-09-29 18:57:04

这是我的解决办法。希望能有帮助

@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)

相关问题 更多 >

    热门问题