私は長い間、長い間興味があるケースがあります。ネストされた関係を処理するための適切な方法
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およびクライアントアプリケーションを持っている:私は3つのモデルを持っていると言います。だから私はそれらの間で通信する必要があります!
{
"id": 1,
"customer": 1,
"comment": "Foobar",
"products": [
{
"id": 1,
"product": {
"id": 1,
....
},
....
},
....
]
}
/purchase/1/
は、だから私はproducts
フィールドが順番にネストされた使用PurchasedProductSerializer
を使用する必要があることを指定し、適切なシリアライザを作成してアクセスするとき、私は私がDRFでこの状況をどのように処理するかわからない、自然に私はこのような何かを得ることを期待するProductSerializer
。 Reactなどの適切なコンポーネントを使って買い物をしている間に、購入した特定の商品と購入した商品の数量を表示するのに必要なすべての情報を得ることができます。
しかし、私にとって問題は、POST
新しいPurchasedProduct
が必要なときです。それはすべての必要な情報を保持し、最小のフットプリントを持っていたよう
{
"quantity": 10,
"purchase": 1,
"product": 1
}
:私が最も便利なフォームがあることを期待します。しかしid
の代わりにproduct
が必要なので、私はPurchasedProductSerializer
を使って達成することはできません。
GET
とPOST
の2つの別々のシリアライザを使用する必要がありますので、これは良いアプローチです(これは私にとって非常に自然なことです)。私はこれを別の方法で行うべきですか?いくつかのベストプラクティス/書籍でAPIやクライアントアプリケーションの作成方法を教えてください。