Django Rest框架中的嵌套序列化器数据

时间:2019-10-21 11:54:46

标签: django django-rest-framework

我有3种这样的Django模型

保留订单记录

class Orders(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, blank=True, null=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

需要整理的文章,例如比萨饼等

class OrderArticle(models.Model):
    order = models.ForeignKey(Orders, on_delete=models.CASCADE)
    article = models.ForeignKey(Articles, on_delete=models.CASCADE)

按顺序排列的文章的文章选项(如比萨饼上的浇头,现在浇头可以是4种或更多类型)

class OrderArticleOptions(models.Model):
    article_option = models.ForeignKey(ArticlesOptions, on_delete=models.CASCADE)
    order_article = models.ForeignKey(OrderArticle, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2)

为了跟踪这种Multipul类型的Article选项,我制作了此表。因此示例将是。 客户购买了2种浇头的披萨,第一浇头法吉塔数量为1,第二浇头oliva数量为3。

要使用Django Rest框架获得此用例,我该怎么办?

问题

我想要这样的数据

数据{

orders[

 article1
     {
      articleoptio1
       {}
      articleoption2
       {}        
      }

]

}

现在的问题是,当我将2种类型的浇头按顺序添加到单个文章中时,它会创建2个差异订单,其中每个文章选项包含2个文章。虽然我想要1条文章和2条文章选项。

2 个答案:

答案 0 :(得分:1)

class ArticlesSerializer(ModelSerializer):
    class Meta:
        model = Articles
        fields = "__all__"


class OrderSerializer(ModelSerializer):
    articles = ArticlesSerializer(source="resturant.article", many=True)
    class Meta:
        model = Orders
        fields = "__all__"

好的,我在这里使用嵌套的序列化程序,其键为“源”。 “源”是一个高级概念,对此我感到抱歉,但是我看不到任何其他最佳方法。您可以从视图中调用序列化器。

如果您想了解有关嵌套序列化程序的更多信息,建议您阅读本教程,

https://www.youtube.com/watch?v=rAJAC_P52VU

答案 1 :(得分:0)

尝试嵌套序列化器,它将解决您的问题。请参阅嵌套的序列化程序文档。

https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects