【问题标题】:Reformat Django REST Framework Serializer to get Output重新格式化 Django REST 框架序列化程序以获取输出
【发布时间】:2020-09-07 19:12:14
【问题描述】:

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

我的模特:

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',]

我应该使用什么查询来获得上述格式的输出?我的序列化器会是什么样子?如何区分ownlend?我还存储了自己的并用+- 标志来区分它们。

【问题讨论】:

    标签: django python-3.x django-models django-rest-framework django-views


    【解决方案1】:

    同样使用ListField

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

    另请参阅How to serialize an 'object list' in Django REST Framework

    您可以在这里尝试:

    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',]
    

    【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2019-05-20
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多