关于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()方法来完成我想要的。 我的问题是我不知道哪里和如何我会覆盖它。 你能救我吗?
答案 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'
}