def _deserialize(self, value, attr, data):
if value is None:
return None
if isinstance(value, DBRef):
if self._document_cls.collection.name != value.collection:
raise ValidationError(_("DBRef must be on collection `{collection}`.").format(
self._document_cls.collection.name))
value = value.id
elif isinstance(value, Reference):
if value.document_cls != self.document_cls:
raise ValidationError(_("`{document}` reference expected.").format(
document=self.document_cls.__name__))
if type(value) is not self.reference_cls:
value = self.reference_cls(value.document_cls, value.pk)
return value
elif isinstance(value, self.document_cls):
if not value.is_created:
raise ValidationError(
_("Cannot reference a document that has not been created yet."))
value = value.pk
elif isinstance(value, self._document_implementation_cls):
raise ValidationError(_("`{document}` reference expected.").format(
document=self.document_cls.__name__))
value = super()._deserialize(value, attr, data)
# `value` is similar to data received from the database so we
# can use `_deserialize_from_mongo` to finish the deserialization
return self._deserialize_from_mongo(value)
评论列表
文章目录