python - Django rest框架,从其他模型数组创建模型
问题描述
在我的应用程序中,我有以下模型:产品、订单和订单条目
订单由 OrderEntries 组成,OrderEntries 代表购物车中的每一行,由产品和金额组成。
现在,我想用我的 rest api 做的是通过将 OrderEntries 数组发布到 /api/orders 来创建 Order 对象的能力,这将验证该数组,然后创建新的 OrderEntries 和最终的 Order 对象。
我将如何在休息框架中做这样的事情?
编辑:我的序列化程序现在的样子:
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")
这将要求我将以下内容发布到 /orders:
{
"order_state": "string",
"entries": [
"string"
]
}
我想要的只是发布以下内容,状态字段将在创建期间设置:
{
"entries": [
ProductEntry,
...
]
}
解决方案
当您有如此复杂的关系时,您总是必须重写序列化程序的create
方法并注意创建对象。签出 DRF 可写嵌套序列化程序。在您的情况下,一个简单的解决方案可以是这种形式:
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
有一个ForeignKey
链接到Order
推荐阅读
- java - Java Linked List - can't access data if its been viewed already
- angular - 在 RxJS 管道中捕获完成
- php - Icecast歌曲历史
- php - 狮身人面像错误:“搜索请求中的未知本地索引”消息“
- javascript - 如何为所有fabricjs对象添加属性?
- tensorflow - 仅掩码 RCNN 1 类
- c++ - c ++将variadac函数参数转发给类构造函数
- pine-script - 高效的下不完全 Beta 函数
- discord - 我怎么能说哪个 Discord 成员是通过哪个邀请来的?
- css - 在方形网格中显示图像(React + Material UI Grid)