Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django Rest框架中设置双嵌套序列化程序_Django_Django Rest Framework - Fatal编程技术网

如何在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.