python - 购物车数据库未显示订购的单个商品数量
问题描述
我正在尝试创建一个购物车模型,我已经创建了 Order 模型、OrderItem 模型以及 Item 模型。虽然我发现很难将它模型的订单链接到 API 视图中的订单。
这是模型
class Pizza(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=60)
desc = models.CharField(max_length=150)
price = models.IntegerField()
url = models.CharField(max_length=250)
def __str__(self):
return self.name
class OrderItem(models.Model):
id = models.AutoField(primary_key=True)
product = models.ForeignKey("Pizza", on_delete=models.CASCADE, null=True)
date_added = models.DateTimeField(auto_now=True)
date_ordered = models.DateTimeField(null=True)
amount = models.IntegerField(null=True)
def __str__(self):
return self.product.name
class Order(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=60)
email = models.CharField(max_length=150)
address = models.CharField(max_length=150)
total = models.IntegerField()
created_at = models.DateTimeField(default=timezone.now)
items = models.ManyToManyField(OrderItem)
def __str__(self):
return self.name
//The viewset
class OrderViewSet(viewsets.HyperlinkedModelSerializer):
# permission_classes = [IsPostOrIsAuthenticated,]
serializer_class = OrderSerializer
queryset = Order.objects.all().order_by('-created_at')
目前,我无法在我的 API 中显示订单项目的金额属性,它只显示 id 以及指向订单中单个订单项目的链接
解决方案
我认为对于购物车,您可以在 Order 和 Pizza 之间的关系上使用外部字段。关于这里的文档
您的模型如下所示:
class Pizza(models.Model):
name = models.CharField(max_length=60)
desc = models.CharField(max_length=150)
price = models.IntegerField()
url = models.CharField(max_length=250)
def __str__(self):
return self.name
class Order(models.Model):
name = models.CharField(max_length=60)
email = models.CharField(max_length=150)
address = models.CharField(max_length=150)
total = models.IntegerField()
created_at = models.DateTimeField(auto_now=True)
items = models.ManyToManyField(Pizza, through='OrderItem')
def __str__(self):
return self.name
class OrderItem(models.Model):
product = models.ForeignKey('Pizza', on_delete=models.CASCADE, null=True)
order = models.ForeignKey('Order', on_delete=models.CASCADE, null=True)
date_added = models.DateTimeField(auto_now=True)
date_ordered = models.DateTimeField(null=True)
amount = models.IntegerField(null=True)
def __str__(self):
return self.product.name
例如,如何按顺序获取项目数量的字典:
order = Order.objects.filter('-created_at').first() // get last order
cart = {item.pk: item.amount for item in order.items}
推荐阅读
- java - 无法使用 Java 创建带有日历 API 的 hangoutsMeet
- r - R Markdown 针织到 PDF 格式问题
- android - 在 Android 中调度 JobService - 最小周期间隔
- c - cs50 pset4/less 反映 check50 不工作
- java - 在spring security中排除身份验证以通过过滤器
- assembly - 通过利用堆栈重定向逻辑流
- android - 即使实现了后退按钮关闭,它也不起作用
- gfortran - 将 gfortran 编译的二进制文件分发给没有 Xcode 的 Mac OS X 用户?
- python - 接收 KeyError 但键存在于嵌套字典中
- ros - ROS-melodic 与 Gazebo 11 的兼容性