Python Django rest框架,从其他模型数组创建模型

Python Django rest框架,从其他模型数组创建模型,python,rest,django-rest-framework,Python,Rest,Django Rest Framework,在我的应用程序中,我有以下模型:产品、订单和订单条目 订单由OrderEntries组成,OrderEntries代表购物车中的每一行,由产品和金额组成 现在,我想用restapi创建Order对象,方法是将OrderEntries数组发布到/api/orders,这将验证数组,然后创建新的OrderEntries和最终的Order对象 在rest框架中,我将如何做类似的事情 编辑:我的序列化程序现在的样子: class ProductSerializer(serializers.Hyperli

在我的应用程序中,我有以下模型:产品、订单和订单条目

订单由OrderEntries组成,OrderEntries代表购物车中的每一行,由产品和金额组成

现在,我想用restapi创建Order对象,方法是将OrderEntries数组发布到/api/orders,这将验证数组,然后创建新的OrderEntries和最终的Order对象

在rest框架中,我将如何做类似的事情

编辑:我的序列化程序现在的样子:

class ProductSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Product
        fields = ('pk', 'name', 'author', 'description', 'imageUrl', 'thumbUrl', 'price')


class OrderEntrySerializer(serializers.PrimaryKeyRelatedField, serializers.ModelSerializer):
    class Meta:
        model = OrderEntry
        fields = ("pk", "product", "amount")


class OrderSerializer(serializers.HyperlinkedModelSerializer):
    entries = OrderEntrySerializer(many=True, queryset=OrderEntry.objects.all())

    class Meta:
        model = Order
        fields = ("pk", "order_state", "entries")
这将需要我将以下内容发布到/订单:

{
  "order_state": "string",
  "entries": [
    "string"
  ]
}
我只想发布以下内容,状态字段将在创建期间设置:

{
   "entries": [
       ProductEntry,
       ...
    ]
}

您可以尝试将order json对象作为
Base64
字符串传递

例如:

假设您的订单如下所示:

    {
       "name" : "Doughnut",
       "price" : "1.50"
    }
此版本的
Base64
编码版本类似于:

EWOGICAGICAGICGJUYW1LIA6ICJEB3VNAG51DCISCIAGIAGICAGICAGINBYAWNLIA6ICIXLJUWIGOGICAGICAGIH0=

现在,您可以对其进行解码并检索订单详细信息

Base64
编码是构建web服务时使用的一种相当常见的技术

有用的参考资料:


当您拥有如此复杂的关系时,您总是必须覆盖序列化程序的
创建
方法并负责创建对象。结账
在您的情况下,一个简单的解决方案可以是以下形式:

class OrderSerializer(serializers.HyperlinkedModelSerializer):
    entries = OrderEntrySerializer(many=True, queryset=OrderEntry.objects.all())

    class Meta:
        model = Order
        fields = ("pk", "order_state", "entries")

    def create(self, validated_data):
        entries = validated_data.pop('entries', None)

        order = super().create(validated_data)

        for entry in entries:
            OrderEntry.objects.create(order=order, **entry)

        return order

当然,这是一个非常简单的解决方案,因为我没有您的模型及其关系的全部细节,但这应该让您知道需要做什么。在这里,我假设
OrderEntry
有一个链接到
Order
ForeignKey
你能展示你尝试过的东西吗?你的假设是正确的,它们是通过ForeignKey链接的,这看起来和我一直在想的完全一样。很好。你可以试一下,如果结果令人满意,别忘了接受答案