如何将嵌套的棉花糖模式与 Mongoengines lazyReferenceFields 一起使用?
How to use nested marshmallow schemas with Mongoengines lazyReferenceFields?
我定义了以下棉花糖模式和 mongoengine 类:
class DataReport(Document):
id = ObjectIdField(required=True)
firmware_statistics_report_reference_id = LazyReferenceField(FirmwareReport, required=True)
...
class DataReportSchema(Schema):
id = fields.Str()
firmware_statistics_report_reference_id = fields.Nested(FirmwareReportSchema)
...
class FirmwareReport(Document):
id = ObjectIdField(required=True)
firmware_id_list = ListField(required=True))
...
class FirmwareReportSchema(Schema):
id = fields.Str()
firmware_id_list = fields.List(fields.Str())
...
report = DataReport().objects.get(pk=...)
DataReportSchema().dump(report)
是否可以从 mongoengine 转储带有 LazyReferenceField 的嵌套模式?我想要的是获取子架构中定义的所有字段,但是当使用 LazyReferenceField 引用时,我没有找到获取完整架构数据的方法。
如果我转储 DataReportSchema,我只会获得引用的对象 ID,而不是 FirmwareReportSchema 中的字段,这是有道理的,因为它是一个延迟引用,直到我调用 mongoengines fetch() 函数。我假设必须有一种方法可以在转储之前获取 LazyReference,但我不明白如何。
是否可以在 marshmallow dump() 之前 fetch() LazyReference,以便从子模式中获取完整转储而不仅仅是对象 ID?
啊我自己找到了解决办法。可以使用 fields.Method 方法代替 fields.Nested 方法。然后可以在自定义方法中获取()id:
class DataReportSchema(Schema):
id = fields.Str()
report_date = fields.DateTime()
firmware_statistics_report_reference_id = fields.Method("get_firmware_schema")
def get_firmware_schema(self, data_statistics_report):
firmware_report = data_statistics_report.firmware_statistics_report_reference_id.fetch()
return FirmwareStatisticsReportSchema().dump(firmware_report)
我定义了以下棉花糖模式和 mongoengine 类:
class DataReport(Document):
id = ObjectIdField(required=True)
firmware_statistics_report_reference_id = LazyReferenceField(FirmwareReport, required=True)
...
class DataReportSchema(Schema):
id = fields.Str()
firmware_statistics_report_reference_id = fields.Nested(FirmwareReportSchema)
...
class FirmwareReport(Document):
id = ObjectIdField(required=True)
firmware_id_list = ListField(required=True))
...
class FirmwareReportSchema(Schema):
id = fields.Str()
firmware_id_list = fields.List(fields.Str())
...
report = DataReport().objects.get(pk=...)
DataReportSchema().dump(report)
是否可以从 mongoengine 转储带有 LazyReferenceField 的嵌套模式?我想要的是获取子架构中定义的所有字段,但是当使用 LazyReferenceField 引用时,我没有找到获取完整架构数据的方法。
如果我转储 DataReportSchema,我只会获得引用的对象 ID,而不是 FirmwareReportSchema 中的字段,这是有道理的,因为它是一个延迟引用,直到我调用 mongoengines fetch() 函数。我假设必须有一种方法可以在转储之前获取 LazyReference,但我不明白如何。
是否可以在 marshmallow dump() 之前 fetch() LazyReference,以便从子模式中获取完整转储而不仅仅是对象 ID?
啊我自己找到了解决办法。可以使用 fields.Method 方法代替 fields.Nested 方法。然后可以在自定义方法中获取()id:
class DataReportSchema(Schema):
id = fields.Str()
report_date = fields.DateTime()
firmware_statistics_report_reference_id = fields.Method("get_firmware_schema")
def get_firmware_schema(self, data_statistics_report):
firmware_report = data_statistics_report.firmware_statistics_report_reference_id.fetch()
return FirmwareStatisticsReportSchema().dump(firmware_report)