重新格式化Django REST Framework序列化器以获取输出 [英] Reformat Django REST Framework Serializer to get Output

查看:170
本文介绍了重新格式化Django REST Framework序列化器以获取输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取特定格式的数据,但我无法获得所需的输出。

I am trying to get data in a particular format but i'm not able to get the desired output.

我的模型:

class Category(models.Model):
    name = models.CharField(max_length=40)


class Expense(models.Model):

    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="category_name")
    description = models.CharField(max_length=200)
    total_amount = models.IntegerField()


class Expense_Details(models.Model):

    expense = models.ForeignKey(Expense, on_delete=models.CASCADE, related_name="payment")  
    user = models.IntegerField()
    amount = models.FloatField()
    type = models.CharField(max_length=100)   ---->type is owe or lend

当我请求 / api / expenses /

Expected Output
{
  "total_expenses": 10, 
  "Expenses": 
               [{
               "id": 1,
               "category": 1,
               "created_by": 1,     ------> user logged id
               "description": "lunch",
               "total_amount": "105",
               "owe": [{
                        "user_id": 1,
                        "amount": 10
                      },
                      {
                        "user_id": 2,
                        "amount": 95
                       }],

               "lend": [{
                        "user_id": 3,
                        "amount": 10
                      },
                      {
                        "user_id": 4,
                        "amount": 95
                       }],
                  }, ...
                  ]
  }

我的输出:

  {
"results": [
    {
        "id": 1,
        "category": 1,
        "description": "lunch at the burj al arab",
        "total_amount": 105,
        "payment": [
            {
                "user": 1,
                "amount": -10
            },
            {
                "user": 2,
                "amount": -95
            },
            {
                "user": 3,
                "amount": 10
            },
            {
                "user": 4,
                "amount": 95
            }
        ]
      }
    ]
 }

我的序列化器:

class ExpenseDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Expense_Details
        fields = ['user', 'amount']


class ExpenseSerializer(serializers.ModelSerializer):
    payment = serializers.SerializerMethodField()

    def get_payment(self, obj):
        return ExpenseDetailsSerializer(obj.payment.all(), many=True).data

    class Meta:
        model = Expense
        fields = ['id', 'category', 'description', 'total_amount', 'payment',]

我应该使用什么查询来获得上述格式的输出?我的序列化程序将如何显示?如何分隔自己 lend ?另外,我还存储了自己的货币并借以 + -符号来区分它们。

What Query should I use to get Output in the above format? How will my serializer look like? How can I separate own and lend? Also I have stored own and lend with + and - sign to differentiate between them.

推荐答案

使用 ListField 进行相同操作。

文档: https://www.django-rest- framework.org/api-guide/fields/#listfield

也请参考

Also refer How to serialize an 'object list' in Django REST Framework

在这里您可以尝试以下操作:

Here you can try something like:

class ExpenseSerializer(serializers.Serializer):
    payment = serializers.ListField(child=ExpenseDetailsSerializer())

    def get_payment(self, obj):
        return ExpenseDetailsSerializer(obj.payment.all(), many=True).data

    class Meta:
        model = Expense
        fields = ['id', 'category', 'description', 'total_amount', 'payment',]

这篇关于重新格式化Django REST Framework序列化器以获取输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆