根据值自定义 drf 序列化程序的 json 输出中的键名称



起初很抱歉问了之前被问过多次的问题(我很确定是(。假设我有这样的模型关系:

class Balance(models.Model):
    class Meta:
        verbose_name = u"Balance"
        verbose_name_plural = u"Balances"
    name = models.CharField(max_length=200, verbose_name=u"Currency", null=True, blank=True)
    count = models.FloatField(verbose_name=u"Count", null=True, blank=True)
    account = models.ForeignKey(Account, verbose_name='Account', on_delete=models.CASCADE, null=True, blank=True)
    def __str__(self):
        return self.name
class Account(Page):
    ...

还有那些序列化程序

class BalanceSerializer(serializers.ModelSerializer):
    class Meta:
        model = accounts.Balance
    fields = ('pk', 'name', 'count')
class AccountSerializer(serializers.ModelSerializer):
    balance_set = BalanceSerializer(many=True, required=False)
    class Meta:
         model = accounts.Account
         fields = (... , balance_set )

所以帐户序列化程序像这样返回我 json 输出:

{
*some account information*
balance_set:
   { 
   pk: 1
   name: foo,
   count: bar
   }, ...
}

但我希望它像这样balance_set回报我:

{
    *some account information*
    balance_set:
       { 
       foo: bar,
       balanceName:balanceCount,
       }
    }

我已经在文档中搜索并查找了,但无法理解如何做到这一点。

您可以重写序列化程序的to_representation来执行此操作

def to_representation(self, instance):
    data = super(AccountSerializer, self).to_representation(instance)
    balance_set = data.get('balance_set')
    for i in balance_set:
         foo = i.get('name')
         bar = i.get('count')
         data['balance_set'][foo] = bar      
    return data

最新更新