如何在保存REST Framework之前反序列化

时间:2015-02-03 00:39:21

标签: python django serialization django-rest-framework

我有这个序列化器

users = serializers.PrimaryKeyRelatedField(many=True, required=False)

现在,这需要用户列出[1,2,3]

现在我发送用户作为[user1, user2]等用户对象的完整列表。

我可以使用JS在前端创建id列表。但我想在serilaizer中使用一些功能,我可以将其作为完整对象发布,但系统会将其列为ID。

我使用了Complete UsersSerializer而不是PrimaryKey,但是它会尝试用它来编写用户对象,或者根本不写。我只想写多对多的关系

1 个答案:

答案 0 :(得分:0)

使用UsersSerializer

users = UsersSerializer(many=True, required=False)

并覆盖序列化程序中的validate方法。从用户ID列表中检索所有用户实例,并将其重新分配给data['users']。因此,当selerializer调用create / update方法时,在经过验证的数据dict中,您将拥有用户实例而不是用户ID。

def validate(self, data):
    request = self.context['request']
    user    = request.user
    print "dataaaaaaaaaaaaaaaaaaaaaaaaaaa",
    users_ids = request.DATA.getlist('users')
    users = User.objects.filter(id__in=users_id)
    data['users'] = users
    return data