如何在Django Rest框架中设置双嵌套序列化程序
我正试图找出如何设置嵌套序列化程序如何在Django Rest框架中设置双嵌套序列化程序,django,django-rest-framework,Django,Django Rest Framework,我正试图找出如何设置嵌套序列化程序 # models.py class Product(models.Model): sku = models.CharField() product_name = models.CharField() class Order(models.Model): name = models.CharField() address = models.CharField() class OrderProduct(models.Model
# models.py
class Product(models.Model):
sku = models.CharField()
product_name = models.CharField()
class Order(models.Model):
name = models.CharField()
address = models.CharField()
class OrderProduct(models.Model):
order = models.ForeignKey( Order )
product = models.ForeignKey( Product )
quantity = models.IntegerField()
因此,我希望有一个api,可以创建以下形式的订单:
{
"name" : "James",
"address" : "100 Main St",
"products" : [
{ "sku" : "1234", "quantity" : 1 }
]
}
我知道我需要OrderSerializer中的nest OrderProductSerializer,但是当“产品”数据使用OrderProduct模型中找不到的字段“sku”时,我如何在这里实现它。我做双重嵌套吗?看起来怎么样
# serializers.py
class OrderProductSerializer( serializers.ModelSerializer):
class Meta:
model = OrderProduct
exclude = ()
class OrderSerializer(serializers.ModelSerializer):
products = OrderProductsSerializer(many=True)
class Meta:
model = Order
exclude = ()
您正试图在反向关系上实现嵌套序列化。因此,必须通过
source
参数显式地将关系名称作为参数提供给序列化程序
试试这个
class OrderProductSerializer(serializers.ModelSerializer):
class Meta:
model = OrderProduct
fields = '__all__'
class OrderSerializer(serializers.ModelSerializer):
product = OrderProductSerializer(many=True, source='product_set')
class Meta:
model = Order
fields = '__all__'
有关更多信息,请参考这些文档
1.
2.
3.