【发布时间】:2020-11-07 23:27:46
【问题描述】:
我想设计订购商品的解决方案。我有创建订单的端点,但我需要在订单中有 items 对象。让我给你看代码
class ItemModel(models.Model):
name = models.CharField(max_length=50)
price = models.FloatField()
discretion = models.CharField(max_length=500)
available = models.BooleanField(default=True)
class OrderModel(models.Model):
phone = models.CharField(max_length=20)
delevary_time = models.DateTimeField()
class CartModel(models.Model):
order = models.ForeignKey(OrderModel, on_delete=models.CASCADE, related_name='order_m')
item = models.ForeignKey(ItemModel, on_delete=models.CASCADE, related_name='item_m')
我需要为我创建订单的端点。她我做了什么
class CartSerializer(serializers.ModelSerializer):
class Meta:
model = CartModel
exclude = ['order',]
depth = 2
class OrderSerializer(serializers.ModelSerializer):
cart = serializers.SerializerMethodField()
class Meta:
model = OrderModel
fields = ['phone', 'state', 'delevary_time', 'cart']
def get_cart(self, obj):
cart = CartModel.objects.filter(order__id=obj.id)
serializer = CartSerializer(cart, many=True)
return serializer.data
这是终点
router.register('order', OrderViewSet, 'api-order')
{
"phone": 124997988698,
"delevary_time": "2020-07-17T19:34:00",
"cart": [
{
"item": 1
},
{
"item": 2
}
]
}
当我发布 json 时,它不会保存购物车,它只会保存 oder 电话和 delevary_time。如何同时保存购物车
【问题讨论】:
-
这是为了更好地为外键使用嵌套序列化程序,而不是
SerializerMethodField,因为它是只读的 -
怎么办?你能给我线索吗
-
这里有完整的例子 -> django-rest-framework.org/api-guide/relations/…
-
它给了我这个错误
python Original exception text was: 'OrderModel' object has no attribute 'cart'. -
我发现它保存了模型,但在获取请求中出现了问题。我不知道方法!!.. 另外,在 Post 请求中它保存模型并显示错误消息
标签: django django-models django-rest-framework django-forms django-views