如何显示在django rest的序列化程序中验证的字段的标签

时间:2018-04-30 01:53:44

标签: django django-rest-framework

如何显示在django rest的序列化器中验证的字段的标签?

返回json显示错误,但是使用字段的名称而不是Label的名称。

谢谢。

inf_nome = serializers.CharField(label='Nome', max_length=255)
doc_cpf  = serializers.CharField(label='CPF', max_length=15)

    class Meta:
        model = Associado
        fields =  ('inf_nome', 'doc_cpf')
        associado = AssociadoSerializer(data=request.data)

        if associado.is_valid():
            return Response({'mansagem': 'Sucesso! Up'}, status=HTTP_200_OK)

        return JsonResponse(associado.errors)
  

inf_nome:[“Estecampoéobrigatório。”]

     

doc_cpf:[“Estecampoéobrigatório。”]

1 个答案:

答案 0 :(得分:0)

如何解决错误?

方法1
您必须在inf_nome请求有效负载)中提供足够的数据(doc_cpfrequest.data),
样本有效载荷

{
"inf_nome":"some data 1",
"doc_cpf":"some other data"
}


方法-2您可以通过提供下面的required=False将这些字段设置为可选字段,

class AssociadoSerializer(serializers.ModelSerializer):
    inf_nome = serializers.CharField(label='Nome', max_length=255, required=False)
    doc_cpf = serializers.CharField(label='CPF', max_length=15, required=False)

    class Meta:
        model = Associado
        fields = ('inf_nome', 'doc_cpf')



如何在序列化程序响应中显示label

我找到了一种方法,(不确定它是一种django方式),它覆盖了to_representation()方法。因此,您的序列化器将如下所示

class AssociadoSerializer(serializers.ModelSerializer):
    inf_nome = serializers.CharField(label='Nome', max_length=255, required=False)
    doc_cpf = serializers.CharField(label='CPF', max_length=15, required=False)

    class Meta:
        model = Associado
        fields = ('inf_nome', 'doc_cpf')

    def to_representation(self, instance):
        return_data = super().to_representation(instance)
        copy = return_data.copy()
        copy.update(
            {"inf_nome_label": self.fields.get('inf_nome').label,
             "doc_cpf_label": self.fields.get('doc_cpf').label}
        )
        return copy


输出串行器响应

{
"inf_nome":"some data 1",
"doc_cpf":"some other data",
"inf_nome_label":"Nome",
"doc_cpf_label":"CPF"
}