Django REST Framework:源kwarg是否可以在SerializerMethodField中工作?

时间:2019-05-14 17:36:58

标签: django-rest-framework

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的预期行为的任何见解,将不胜感激!

1 个答案:

答案 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=不是受人尊敬的论点。