如何捕捉django上的字母休息序列化

时间:2016-11-24 20:43:56

标签: python django django-rest-framework

在我的数据库中,我有一个nome字段,在这个字段中,所有数据都是大写的。我需要以标题格式返回,只需要title()方法。 例如:

我的字段名称中的数据: CAFE SANTA CLARA SOLUVEL GRAN。 RF 50G-12501

我需要这样的回报: Cafe Santa Clara Soluve Gran Rf 50G-12501

我使用django rest serializer来返回这些数据。

这是最好的方法吗?在我的模型中,序列化程序类或我的视图?

韩国社交协会!

模型:

class Produto(models.Model):
    def __str__(self):
        return self.nome.encode('utf-8')

    def __unicode__(self):
        return self.nome.encode('utf-8')

    categoria = models.ForeignKey(ProdutoCategoria, null=True, blank=True)
    marca = models.ForeignKey(ProdutoMarca, null=True)
    nome = models.CharField(max_length=256, null=True) #its this column
    unidade = models.CharField(max_length=256, null=True, db_column='unid')
    ean = models.CharField(max_length=256, null=True)
    ncm = models.DecimalField(max_digits=65, null=True, decimal_places=2)
    fator = models.DecimalField(max_digits=100, null=True, decimal_places=2)
    fornecedor = models.CharField(max_length=256, null=True)
    imagem = models.TextField(blank=True, null=True)
    id_externo = models.IntegerField(null=True, blank=True)
    top = models.NullBooleanField(null=True, blank=True)

串行器:

class ProdutoSerializer(serializers.ModelSerializer):
    marca = serializers.CharField(source='marca.nome')
    categoria_pai = serializers.IntegerField(source='categoria.pai.id')
    class Meta:
        model = Produto
        fields = (
            'ean',
            'id',
            'nome',
            'imagem',
            'marca',
            'categoria',
            'categoria_pai'
        )

1 个答案:

答案 0 :(得分:0)

最好的方法是使用序列化程序:

这样的事情:

class ServiceSerializer(serializers.ModelSerializer):
    category = ServiceCategorySerializer()

    service = serializers.SerializerMethodField()

    def get_service(self, obj):
        return obj.service.upper() if obj.service else None

这是第一种方式:) 第二个是更改tour to_representation,如下所示:

class ServiceSerializer(serializers.ModelSerializer):
    category = ServiceCategorySerializer()

    class Meta:
        model = Service
        fields = ('service', 'category')

    def to_representation(self, instance):
        data = super(ServiceSerializer, self).to_representation(instance=instance)
        data['service'] = data['service'].lower() if data['service'] else data['services']
        return data

问题在于:)在每次保存之前 - 你应该扭转这个过程 - 特别是在第二种情况下。但是在第一种情况下 - 你也会从前面得到改变的值,所以基本上在一段有限的时间之后你将重写所有数据库行;)

有人建议 - 为什么你不想在正面做这个?