这是我的第一个Django项目,我正在尝试实现添加到购物车的功能。
我应该在此模型中进行哪些更改,以便多个"项目"可以添加到"订单",还可以跟踪商品数量?
from django.db import models
from django.utils import timezone
# Create your models here.
class Order(models.Model):
customer = models.ForeignKey('Customer')
ordered_item = models.ForeignKey('OrderQuantity', on_delete=models.CASCADE, null=True)
address = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
class Customer(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
phone = models.CharField(max_length=50)
def __str__(self):
return self.first_name
class Item(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
description = models.TextField(null=True)
summary = models.TextField(null=True)
type = models.CharField(max_length=50, null=True)
brand = models.CharField(max_length=50, null=True)
weight = models.DecimalField(default=0.00, max_digits=100, decimal_places=3)
picture = models.ImageField(null=True, upload_to='images/')
created_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
class OrderQuantity(models.Model):
product = models.ForeignKey('Item')
quantity = models.PositiveIntegerField()
答案 0 :(得分:0)
您需要在订单模型中创建ManyToManyField
class Order(models.Model):
customer = models.ForeignKey('Customer')
ordered_item = models.ForeignKey('OrderQuantity', on_delete=models.CASCADE, null=True)
address = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
items = models.ManyToManyField(Item)
然后您可以通过以下方式添加订购商品:
someorder.items.add(someItem)
答案 1 :(得分:0)
在商品模型中使用ManyToManyField
class Item(models.Model):
orders = models.ManyToManyField(Order)
---
所以一个项目有很多订单。您可以order.item_set
或item.orders
答案 2 :(得分:0)
这取决于你的物品型号。
如果Item包含一种产品 - 您可能希望在Order模型中使用多对多字段,如下所示:
class Order(models.Model):
...
items = models.ManyToManyField(Item)
...
如果Item描述了一个真实项目(不是项目类型),那么正确的方法是在Item模型中使用ForeignKey:
class Item(models.Model):
...
order = models.ForeignKey(Order)
...