【发布时间】:2016-07-12 21:48:51
【问题描述】:
我有一个案例,我好奇了很久很久。假设我有 3 个模型:
class Product(models.Model):
manufacturer = models.CharField(max_length=100)
description = models.TextField(blank=True)
class PurchasedProduct(models.Model):
product = models.ForeignKey(Product)
purchase = models.ForeignKey('Purchase')
quantity = models.PositiveIntegerField()
class Purchase(models.Model):
customer = models.ForeignKey('customers.Customer')
products = models.ManyToManyField(Product, through=PurchasedProduct)
comment = models.CharField(max_length=200)
我有一个用一些 JavaScript 框架编写的 API 和客户端应用程序。所以现在我需要在他们之间进行沟通!我不确定我应该如何处理 DRF 中的这种情况,自然我希望在访问/purchase/1/时会得到这样的结果@
{
"id": 1,
"customer": 1,
"comment": "Foobar",
"products": [
{
"id": 1,
"product": {
"id": 1,
....
},
....
},
....
]
}
所以我创建了正确的序列化程序,指定 products 字段应使用 PurchasedProductSerializer,而 PurchasedProductSerializer 又使用嵌套的 ProductSerializer。这很好,因为我获得了所有必要的信息,例如,使用 React 中的适当组件显示购买了哪些特定产品以及购物期间的数量。
然而,当我需要POST new PurchasedProduct 时,我遇到的问题是。我希望最方便的形式是:
{
"quantity": 10,
"purchase": 1,
"product": 1
}
因为它携带所有必要的信息并且占用空间最小。但是我无法使用PurchasedProductSerializer 完成,因为它需要product 成为对象而不是id。
所以我的问题是,这是一个好方法吗(对我来说似乎很自然),我应该为GET 和POST 使用两个单独的序列化程序吗?我应该以不同的方式执行吗?您能否指出一些如何编写 API 和客户端应用程序的最佳实践/书籍?
【问题讨论】:
标签: reactjs django-rest-framework vue.js