SerializerMethodFields
是否接受source=
矮人?
我遇到了一个错误,我一直在向source=
中的SerializerMethodFields
传递值,但始终将其忽略。也就是说,作为obj
传递给我的SerializerMethodField
的参数始终是我要序列化自身的实例(例如source='*'
)。
DRF文档说,在某些link to my website中,所有字段类型都应包含source=
参数。
话虽如此,DRF文档对SerializerMethodField
说了这样的话:
SerializerMethodField 这是一个只读字段。它通过在附加的序列化器类上调用一个方法来获取其值。它可以用于将任何类型的数据添加到对象的序列化表示中。
签名:
SerializerMethodField(method_name=None)
method_name
-要调用的序列化程序上的方法的名称。如果未包含,则默认为get_<field_name>
。
method_name
参数引用的序列化程序方法应接受单个参数(除了self
之外),该参数是要序列化的对象。它应该返回要包含在对象的序列化表示中的任何内容。
关于source=
的预期行为,我没有给出令人信服的答案,因为它没有说没有其他核心缺点适用。
对于source=
中SerializerMethodField
的预期行为的任何见解,将不胜感激!
答案 0 :(得分:0)
我对SerializerMethodField
的源代码做了一些窥探,并看到了
class SerializerMethodField(Field):
# ...ignoring useful docstrings for brevity...
def __init__(self, method_name=None, **kwargs):
self.method_name = method_name
kwargs['source'] = '*' # <-- and here's our answer
kwargs['read_only'] = True
super().__init__(**kwargs)
如果对于SerializerMethodField
的DRF文档更明确地说,没有其他core arguments在这里适用,而是生活,我会很高兴。
答案:不,source=
不是受人尊敬的论点。