【发布时间】:2019-10-24 08:54:22
【问题描述】:
我正在尝试在 Django 中制作一个简单的披萨订购应用。我有 3 个模型(浇头、比萨饼、订单)。在 Orders 模型中有 ManyToManyField 到 Pizza。如果“用户”为每个披萨(例如玛格丽塔和意大利辣香肠)订购一个,则工作正常,但如果在 POST 请求中订购 2 个玛格丽塔,我的结果中只有一个玛格丽塔 ID。我如何在一个订单中通过 n-pizzas?
我的模型如下所示:
class Toppings(models.Model):
name = models.CharField(blank=False, max_length=100, unique=True)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class Pizza(models.Model):
name = models.CharField(blank=False, max_length=100, unique=True)
ingredients = models.ManyToManyField(Toppings, blank=False, null=False)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class PizzaOrder(models.Model):
created = models.DateTimeField(auto_now_add=True)
items = models.ManyToManyField(Pizza, blank=False, null=False)
status = models.CharField(max_length=1, choices=[
(1, 'placed'),
(2, 'approved'),
(3, 'cooked'),
(4, 'delivered'),
(5, 'canceled')
], default=1)
class Meta:
ordering = ['created']
def __str__(self):
return self.created
我用这个数据发送 POST:
{
"items": [1, 1, 1, 2, 2],
"status": 1
}
并且在项目列表中只得到了 1 和 2(不是 1,1,1,2,2):
{
"id": 2,
"items": [
1,
2
],
"status": 1
}
Order 的序列化器和视图
class OrdersSerializer(serializers.ModelSerializer):
class Meta:
model = PizzaOrder
fields = ['id', 'items', 'status', 'created']
class PizzaOrdersList(ModelViewSet):
queryset = PizzaOrder.objects.all()
serializer_class = OrdersSerializer
【问题讨论】:
-
因为项目引用了比萨模型。所以 1 Order A 对 Pizza1 的引用 1000 次,那么它仍然是 1 Oder A 对 1 Pizza1 的引用。我认为您需要创建一个 PizzaOrderItem,其中包含对 Pizza 的引用以及这种比萨的数量
-
你能展示 PizzaOrderItem 模型的例子以及如何从 Oder 发布请求中计算项目吗?
-
下面的答案已经回答了你的问题..这是一个很好的答案
标签: sql django django-rest-framework foreign-keys