具有多种字典

时间:2018-03-23 13:48:32

标签: django django-rest-framework

我正在创建支持RESTful有效负载的frontend个端点。 我的有效负载是build your own菜和ready-made single dish

的订单

问题:
在单POST frontend中。他想把所有东西都放到一次。在给定的list中,这意味着将包含2种类型的字典 一个用于build your own,另一个用于ready-made single dish

IMO:
对于每种类型的有效载荷,他可以POST 2次。通过这种方法,端点将做一件事,我更喜欢这种方式。

他只有一个理由POST一切都是单一终点

问题:
对于这类问题,你最好的做法是什么?

建立自己的有效负载 简而言之,我称之为BYO 1. base_bowl将指示项目的sizeprice 1. base_bowl还将确定fishestoppingssauces的数量。
因为base_bowl大小S,M或L具有不同的配额。

例如

大小S可以有fishes 1个勺子大小S,toppings 2个大小为S的勺子。

大小M可以有fishes 2个大小为M的勺子,toppings 3个勺子大小为M.
然后,如果客户想要添加超过配额,他必须将其添加到{ {1}},extra_fishes 基于extra_toppings ID,因为Price由列表中的成员数决定。

quantity

后端将验证输入并将其插入 { "base_bowl": salad.id, # require=True, Price id "fishes": [salmon.id, tuna.id], "extra_fishes": [tofu.id], "toppings": [tamago.id, mango.id], "extra_toppings": [rambutan.id], "premium_toppings": [ikura.id], "sauces": [shoyu.id, spicy_kimchi.id], "extra_sauces": [], "sprinkles": [sesame.id, fried_shalots.id], "dish_order": 1, # require=True "note": { 'msg': 'eat here', }, } Order

现成菜:
这非常简单,因为它没有像OrderItem那样的隐含逻辑。只需将BYO添加到OrderItem

即可

使用Order ID,尺寸和Menu来确定价格。因为客户可以自由选择

qty

1 个答案:

答案 0 :(得分:0)

我的回答是自以为是,但对我来说,通过保持端点具体和明确定义,RESTful设计更加清晰。因此,在您的情况下,可能会有BYODishViewSetReadyMadeDishViewSet映射到/api/byodish//api/readymadedish/

但是,如果这是更大的单个模型的一部分,比如Order模型,那么您可能需要考虑使用嵌套(可写)序列化程序将订单包装为单个API请求 - 响应。