如何自定义django REST序列化程序的默认值
我想从如何自定义django REST序列化程序的默认值,django,django-rest-framework,serialization,Django,Django Rest Framework,Serialization,我想从userprofile自动读取默认值。现在,官方方法支持User和DateTime。但我想要我的定制价值。我该怎么做 owner = serializers.HiddenField( default=serializers.CurrentUserDefault() ) 这是我的解决办法。复制源代码中的示例并将其放在此处。 希望在不久的将来它有友好的解决方案 class CurrentBranchDefault: def set_context(self, serializ
userprofile
自动读取默认值。现在,官方方法支持User
和DateTime
。但我想要我的定制价值。我该怎么做
owner = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
这是我的解决办法。复制源代码中的示例并将其放在此处。 希望在不久的将来它有友好的解决方案
class CurrentBranchDefault:
def set_context(self, serializer_field):
self.user = serializer_field.context['request'].user
self.branch = self.user.userprofile.selected_branch
def __call__(self):
return self.branch
def __repr__(self):
return unicode_to_repr('%s()' % self.__class__.__name__)
class StaffOrderSerializer(serializers.ModelSerializer):
branch = serializers.HiddenField(default=CurrentBranchDefault())
如果要使用序列化程序中的其他传入字段计算一个隐藏字段, 然后,您需要使用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())