首页 > 解决方案 > 如何在石墨烯 mongo python 中更新 EmbeddedDocument 的字段

问题描述

我正在尝试更新 IgThread EmbeddedDocument 的一个字段,并出现错误: 'IgThread' object has no attribute 'save'

我尝试了一些奇怪的解决方案,但都不起作用。当前代码中存在错误

突变:

def mutate(self, _, **kwargs):
    ig_pk = kwargs['ig_pk']
    thread_input = kwargs['ig_thread']

    lead_ = Lead.objects(ig__pk=ig_pk).first()

    for thread in lead_.messages.ig:

        Lead.objects(
            ig__pk=ig_pk,
            messages__ig__thread_id=thread_input.thread_id,
        ).update(
            push_all__messages__ig__S__messages=new_messages,
        )

        thread.last_activity_at = thread_input.last_activity_at
        thread.save()

家长:

class Lead(Document):
    id = fields.ObjectIdField()
    messages = fields.EmbeddedDocumentField(Messages)

嵌套的嵌入式文档:

class Messages(EmbeddedDocument):
    ig = fields.EmbeddedDocumentListField(IgThread)

更深层次的:

class IgThread(EmbeddedDocument):
    thread_id = fields.StringField()
    last_activity_at = fields.StringField()

我想更新 last_activity_at 请帮忙,我必须修复那个错误,在办公室里没有人能帮我解决这个问题:<

标签: pythonmongodbgraphene-python

解决方案


解决了!很容易...

def mutate(self, _, **kwargs):
    ig_pk = kwargs['ig_pk']
    thread_input = kwargs['ig_thread']

    lead_ = Lead.objects(ig__pk=ig_pk).first()

    for thread in lead_.messages.ig:

        Lead.objects(
            ig__pk=ig_pk,
            messages__ig__thread_id=thread_input.thread_id,
        ).update(
            push_all__messages__ig__S__messages=new_messages,
        )

        lead_ = Lead.objects(ig__pk=ig_pk).first() <--------
        thread.last_activity_at = thread_input.last_activity_at
        lead_.save() <--------

推荐阅读