Python Django rest框架,从其他模型数组创建模型
在我的应用程序中,我有以下模型:产品、订单和订单条目 订单由OrderEntries组成,OrderEntries代表购物车中的每一行,由产品和金额组成 现在,我想用restapi创建Order对象,方法是将OrderEntries数组发布到/api/orders,这将验证数组,然后创建新的OrderEntries和最终的Order对象 在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
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链接的,这看起来和我一直在想的完全一样。很好。你可以试一下,如果结果令人满意,别忘了接受答案