如何自定义django REST序列化程序的默认值

时间:2018-03-02 08:16:57

标签: django django-rest-framework serializer

http://www.django-rest-framework.org/api-guide/validators/#currentuserdefault

我想自动从userprofile读取默认值。现在,官方方法支持UserDateTime。但我想要我的定制价值。我怎么能这样做?

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault()
)

2 个答案:

答案 0 :(得分:1)

这是我的解决方法。从源代码中复制示例并将其放在此处。 希望不久的将来它有友好的解决方案。

sock.send(bytes([2,0,0,0,255,0]))

答案 1 :(得分:0)

如果您要使用序列化程序中的其他传入字段来计算一个隐藏字段, 比您需要使用serializer_field.context ['request']。data

此“数据”将在“ set_context()”之前进行验证,因此您可以安全地使用它。

我希望它会帮助别人。

class DefineNoteType:
    def set_context(self, serializer_field):
        # setting field "type", calculated by other serializer fields
        data = serializer_field.context['request'].data
        subscriber = data.get('subscriber', None)
        connection = data.get('connection', None)
        if subscriber:
            self.type = 'subscriber_type'
        elif connection:
            self.type = 'connection_type'
        else:
            raise serializers.ValidationError('Custom error.')

    def __call__(self):
        return self.type


class NoteSerializer(serializers.ModelSerializer):
    type = serializers.HiddenField(default=DefineNoteType())