Django rest framework Django REST Framework-访问ModelSerializer中字段的详细名称

Django rest framework Django REST Framework-访问ModelSerializer中字段的详细名称,django-rest-framework,field,Django Rest Framework,Field,假设我有以下型号: class Book(Model): title = CharField(verbose_name="Book title") 和模型序列化程序: class BookSerializer(ModelSerializer): class Meta: model = Book fields = "__all__" 我想要一个函数get\u verbose\u names,它返回模型中字段的详细名称。这就是我到目前为止所做的:

假设我有以下
型号

class Book(Model):
    title = CharField(verbose_name="Book title")
模型序列化程序

class BookSerializer(ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"
我想要一个函数
get\u verbose\u names
,它返回模型中字段的详细名称。这就是我到目前为止所做的:

def get_verbose_names(serializer):
    return [field.label for field in serializer.get_fields().values()]
它似乎工作正常,但当我将其用于内置
用户
模型时会出现问题。唯一有效的字段是ID、电子邮件、活动、超级用户状态和员工状态。这些字段的特殊之处在于其详细名称与名称不同。Django REST框架可能隐藏了一个超级智能逻辑,在这种情况下,它会检查这一点并拒绝将字段标签设置为其详细名称


Django REST框架的字段是否隐藏了详细的名称,或者根本没有从原始Django模型字段复制它们,而我就完蛋了?还是要推翻这种逻辑?我试过了,但找不到它。

Django REST框架确实有提到的“超级智能逻辑”。这是
utils.field\u mapping
中的函数
需要标签

def needs_label(model_field, field_name):
    """
    Returns `True` if the label based on the model's verbose name
    is not equal to the default label it would have based on it's field name.
    """
    default_label = field_name.replace('_', ' ').capitalize()
    return capfirst(model_field.verbose_name) != default_label
绕过此恼人功能的最简单方法可能是:

def get_verbose_names(serializer):
    return [field.label or name.replace("_", " ").capitalize() 
            for name, field in serializer.get_fields().items()]
用文字解释,检查字段标签,如果没有自动生成,则使用
needs\u标签
逻辑确定