DRF使用source映射字段时,如何获取正确的模型字段label?
解决DRF序列化器使用source时label不继承模型verbose_name的问题
当手动定义序列化字段并通过source映射到模型字段时,DRF不会自动继承模型字段的verbose_name作为别名字段的label,而是会把字段名(如secondField)自动转换为"Secondfield"作为默认值。要解决这个问题,你可以显式指定label参数,直接复用模型字段的verbose_name。
解决方案代码示例
from django.db import models from rest_framework import serializers class MyModel(models.Model): field1 = models.TextField(verbose_name="Field 1") field2 = models.TextField(verbose_name="Field 2") class MySerializer(serializers.ModelSerializer): # 显式指定label为模型field2的verbose_name secondField = serializers.CharField( source='field2', label=MyModel._meta.get_field('field2').verbose_name ) class Meta: model = MyModel fields = ('field1', 'secondField')
原理说明
通过MyModel._meta.get_field('field2').verbose_name可以直接获取模型中定义的verbose_name值,将其赋值给序列化字段的label参数后,OPTIONS请求返回的元信息里,secondField的label就会显示为模型中设置的"Field 2",同时GET请求的返回逻辑不受任何影响。
内容的提问来源于stack exchange,提问作者Bohdan
相关产品推荐
相关产品推荐

