【问题标题】:Django rest framework bind decimal values from Brazilian currency formatDjango rest框架从巴西货币格式绑定十进制值
【发布时间】:2017-10-08 18:58:09
【问题描述】:

我必须为 django rest 框架应用程序序列化数据,其中一些值将采用巴西货币格式,例如 1.234,45

如何绑定这些数字以使用 django rest 序列化程序和 django 模型

我的模特:

class Produto(models.Model):

    prod_codigo = models.AutoField(db_column='prod_codigo', primary_key=True)
    prod_alias = models.CharField(db_column='prod_alias', max_length=50, null=False)
    prod_descricao = models.CharField(db_column='prod_descricao', max_length=255, null=False)
    prod_valor_venda = models.DecimalField(db_column='prod_valor_venda', max_digits=13, decimal_places=2)
    prod_valor_compra = models.DecimalField(db_column='prod_valor_compra', max_digits=13, decimal_places=2)
    prod_peso_b = models.DecimalField(db_column='prod_peso_b', max_digits=13, decimal_places=2)
    prod_peso_l = models.DecimalField(db_column='prod_peso_l', max_digits=13, decimal_places=2)

我的序列化器:

class ProdutoSerializer(serializers.Serializer):
    prod_codigo = serializers.IntegerField(read_only=True)
    prod_alias = serializers.CharField(required=False, allow_blank=True)
    prod_descricao = serializers.CharField(required=True, allow_blank=True)
    prod_valor_venda = serializers.DecimalField(max_digits=13, decimal_places=2)
    prod_valor_compra = serializers.DecimalField(max_digits=13, decimal_places=2)
    prod_peso_b = serializers.DecimalField(max_digits=13, decimal_places=2)
    prod_peso_l = serializers.DecimalField(max_digits=13, decimal_places=2)

    class Meta:
        model = Produto

    def create(self, validated_data):
        return Produto.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.prod_codigo = validated_data.get('prod_codigo', instance.prod_codigo)
        instance.prod_alias = validated_data.get('prod_alias', instance.prod_alias)
        instance.prod_descricao = validated_data.get('prod_descricao', instance.prod_descricao)
        instance.prod_valor_venda = validated_data.get('prod_valor_venda', instance.prod_valor_venda)
        instance.prod_valor_compra = validated_data.get('prod_valor_compra', instance.prod_valor_compra)
        instance.prod_peso_b = validated_data.get('prod_peso_b', instance.prod_peso_b)
        instance.prod_peso_l = validated_data.get('prod_peso_l', instance.prod_peso_l)
        instance.prod_peso_q = validated_data.get('prod_peso_q', instance.prod_peso_q)
        instance.save()
        return instance

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    如果我理解正确并且 1.234,45 等于 到 1.23445 为什么不在客户端处理呢?在我看来,这是处理格式问题的最佳方式。

    如果您仍想在后端应用中执行此操作,您可以覆盖 to_representation(self, instance) 或者像下面的代码一样使用 SerializerMethodField:

    class ProdutuSerializer(serializer.ModelSerializer):
        ...
        your_field = serializers.SerializerMethodField()
    
        def get_your_field_name(self, instance):
            """ stringify your field """
            return "some format" % instance.field
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 2020-10-05
      • 2016-01-24
      • 2016-09-15
      相关资源
      最近更新 更多