uta*_*ngo 5 django django-rest-framework
我正在使用 django-rest-framework 编写一个 API,用于在前端显示自定义表。
我需要将元数据添加到模型序列化器返回的 json 中:
我尝试用谷歌搜索这个,但我发现的只是如何将自定义非模型字段添加到ModelSerializer.
可以通过修改标签来修改显示名称,通过extra_kwargs标签向派生字段实例提供参数。其他元数据有点棘手。extra_meta因此,我们在元类中引入一个自己的字典。例如,
class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = sfmodels.Contact
fields = [
"first_name",
]
extra_kwargs = {
"first_name": {
"label": _("Your name"),
}
}
extra_meta = {
"first_name": {
"sortable": False,
"header_rotation_angle": 45,
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们扩展元数据生成器以使用额外的数据:
from rest_framework.metadata import SimpleMetadata
class ExtraMetadata(SimpleMetadata):
def get_serializer_info(self, serializer):
"""
Given an instance of a serializer, return a dictionary of metadata
about its fields.
"""
# retrieve meta kwargs if provided
extra_meta = copy.deepcopy(getattr(serializer.Meta, 'extra_meta', {}))
# call the original implementation
field_infos = super().get_serializer_info(serializer)
# and add meta kwargs to the fields
for field_name, field in field_infos.items():
if field_name in extra_meta:
for key, value in extra_meta[field_name].items():
field[key] = value
return field_infos
Run Code Online (Sandbox Code Playgroud)
最后,我们告诉其余框架使用我们的自定义元数据生成器:
REST_FRAMEWORK = {
'DEFAULT_METADATA_CLASS': 'myproject.serializers.ExtraMetadata'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |