我有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条文章选项。
答案 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__"
好的,我在这里使用嵌套的序列化程序,其键为“源”。 “源”是一个高级概念,对此我感到抱歉,但是我看不到任何其他最佳方法。您可以从视图中调用序列化器。
如果您想了解有关嵌套序列化程序的更多信息,建议您阅读本教程,
答案 1 :(得分:0)
尝试嵌套序列化器,它将解决您的问题。请参阅嵌套的序列化程序文档。
https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects