在mongoengine序列化器中验证参考字段

时间:2017-03-06 03:49:32

标签: django serialization mongoengine restframeworkmongoengine

我将 django mongoengine mongoengine-rest-framework 一起使用。

this article所示,在序列化程序元类中指定 related_model_validations 字段

class Comment(Document):
    post = ReferenceField(Post)
    owner = ReferenceField(User)
    text = StringField(max_length=140)
    isApproved = BooleanField(default=False)



from rest_framework_mongoengine import mongoengine_serializer

class CommentSerializer(MongoEngineModelSerializer):
    class Meta:
        model = Comment
        depth = 1
        related_model_validations = {'owner': User, 'post': Post}
        exclude = ('isApproved',)
如果缺少 ReferenceField 引用的文档,

可以帮助您获得以下结果:

{
    "owner":["User with PK ... does not exist."]
}

因此,不是提出验证异常,而是修改了json。

但是,本文是针对旧版 mongoengine-rest-framework 编写的,在当前版本中序列化程序元类中没有字段 related_model_validations

那么如何在当前版本的mongoengine-rest-framework中实现类似的结果?

1 个答案:

答案 0 :(得分:0)

对不起,迟到的回应,阿列克谢。

目前,如果您希望PUTPOST发表评论JSON,您只需将现有所有者和帖子作为id发送,如:

{
    post: 2,
    user: aleksei.rozhnov@stackoverflow.com,
    text: "Contrary to the popular belief, Karl Marx and Friedrich Engels are not a couple, but four different people"
} 

因此,如果您想同时更新CommentPostAuthor,我担心,这是不可能的。

GET请求中,您可以将相关字段作为嵌套的子JSON与Serializer的非零depth参数获取,就像您在示例中所做的那样。