Django-Rest Framework:覆盖determine_metadata()方法

时间:2015-07-15 16:47:22

标签: django rest django-rest-framework

关于Django-Rest-Framework Doc关于Custom metadata我需要在determine_metadata()方法中添加一个属性(myatt),例如:

def determine_metadata(self, request, view):
        metadata = OrderedDict()
        metadata['name'] = view.get_view_name()
        metadata['description'] = view.get_view_description()
        metadata['myatt'] = 'blablabla'
        metadata['renders'] = [renderer.media_type for renderer in view.renderer_classes]
        metadata['parses'] = [parser.media_type for parser in view.parser_classes]
        if hasattr(view, 'get_serializer'):
            actions = self.determine_actions(request, view)
            if actions:
                metadata['actions'] = actions
        return metadata

我在rest-framework目录中编辑了metadata.py文件,只是为了测试并运行。但是以正确的方式,我知道我将覆盖determine_metadata()方法来完成我想要的。 我的问题是我不知道哪里如何我会覆盖它。 你能救我吗?

1 个答案:

答案 0 :(得分:2)

您可以创建一个MyCustomMetadata类,它会为元数据添加额外的属性。

此类将继承自SimpleMetadata类,这是DRF中的默认元数据类。然后,我们将覆盖其中的determine_metadata()函数。我们首先调用super()来获取DRF返回的原始metadata,然后我们将额外的属性添加到metadata

<强>程序my_app / metadata.py

from rest_framework.metadata import SimpleMetadata

class MyCustomMetadata(SimpleMetadata):

    def determine_metadata(self, request, view):
        metadata = super(MyCustomMetadata, self).determine_metadata(request, view)
        metadata['myatt'] = 'blablabla' # add extra attribute to metadata
        return metadata # return the metadata with the extra attribute set in it

现在,我们需要在我们的设置中定义MyCustomMetadata类,然后由DRF使用。

<强> settings.py

REST_FRAMEWORK = {
    ...
    'DEFAULT_METADATA_CLASS': 'my_app.metadata.MyCustomMetadata'
}