问题:
我怎样才能访问序列化器实例 or 任何相关论点 in the 默认可调用函数DRF 场?
设想:
我有一个序列化器配置如下,
def bar_value_callable_function(serializer_instance):
if serializer_instance.context['request'].method == 'GET':
return 'return value One'
return 'return value Two'
类 FooSerializer(serializers.Serializer):
栏 = 序列化器.CharField(源='foo.bar',默认=bar_value_callable_function)
Update
对于DRF>=3.12,使用这个默认类之王
class DefaultBarValue:
requires_context = True
def __call__(self, serializer_instance):
if serializer_instance.context['request'].method == 'GET':
return 'return value One'
return 'return value Two'
pass a 类实例代替function to the default
争论
# default callable class
class DefaultBarValue:
"""
"Method `set_context` on defaults is deprecated and will
no longer be called starting with 3.12. Instead set
`requires_context = True` on the class, and accept the
context as an additional argument.
"""
requires_context = True # for DRF>=3.12
serializer_instance = None # not required for DRF>=3.12
def set_context(self, serializer_instance): # not required for DRF>=3.12
self.serializer_instance = serializer_instance
def __call__(self, serializer_instance=None):
if serializer_instance is None: # will be None for older versions of DRF
if self.serializer_instance.context['request'].method == 'GET':
return 'return value One'
return 'return value Two'
else: # for DRF>=3.12
if serializer_instance.context['request'].method == 'GET':
return 'return value One'
return 'return value Two'
# serializer
class FooSerializer(serializers.Serializer):
bar = serializers.CharField(source='foo.bar', default=DefaultBarValue())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)