Simple Django Model(加入购物车)

时间:2017-03-24 09:26:12

标签: django

这是我的第一个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()

3 个答案:

答案 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_setitem.orders

访问它

答案 2 :(得分:0)

这取决于你的物品型号。

如果Item包含一种产品 - 您可能希望在Order模型中使用多对多字段,如下所示:

class Order(models.Model):
    ...
    items = models.ManyToManyField(Item)
    ...

如果Item描述了一个真实项目(不是项目类型),那么正确的方法是在Item模型中使用ForeignKey:

class Item(models.Model):
    ...
    order = models.ForeignKey(Order)
    ...