【问题标题】:How do I store multiple values in a single attribute如何在单个属性中存储多个值
【发布时间】:2009-07-02 23:38:14
【问题描述】:

我不知道我的想法是否正确,也许有人会纠正我。

假设我有一个包含以下内容的 models.py:

class Order(models.Model):
  customer = models.foreignKey(Customer)
  total = models.charField(max_length=10)
  has_shipped = models.booleanField()

class Product(models.Model):
  sku = models.charField(max_length=30)
  price = models.charField(max_length=10)

现在,显然订单将包含产品而不仅仅是产品。将产品添加到订单中的最佳方式是什么?我能想到的唯一方法是在“订单”中添加另一个名为“产品”的字段,并用 CSV 填充其中每个产品的 sku。出于显而易见的原因,这并不理想,但我还不是很擅长这些东西,也不知道更好的方法是什么。

(请记住这是伪代码,所以不要介意拼写错误等)

【问题讨论】:

    标签: python django e-commerce


    【解决方案1】:

    您所追求的是产品和订单之间的多对多关系。

    类似:

    class Order(models.Model):
      customer = models.foreignKey(Customer)
      total = models.charField(max_length=10)
      has_shipped = models.booleanField()
      products = models.ManyToManyField(Product)
    

    请参阅文档 herehere

    【讨论】:

    • 谢谢伙计。我今天刚刚阅读“使用 Django 进行 Python Web 开发”并得出了这个结论,但整天都在试图弄清楚它是否正确。谢谢。
    【解决方案2】:

    您可以再创建一个模型,用作订单和产品之间的多对多关系

    类似的东西

    class OrderProducts(models.Model)
         product = models.ForeignKey(Product)
         order = models.ForeignKey(Order)
    

    【讨论】:

    • 这是多余的,因为订单本身已经充当“产品订单”
    • 是的,但在答案中。在我写这个答案的时候,我只是不记得 django 中的 models.ManyToManyField 类型,所以提出了经典的解决方案。
    • 这不是多余的。如果您将来有价格变化怎么办。如果您有价格变化,并且订单仅与原始产品相关联,您将无法知道客户为此支付了多少费用。这样您就可以在订购时镜像产品的当前状态。
    【解决方案3】:

    我不建议使用 ManyToMany 字段,因为价格需要保存为 char 字段以供将来参考。

    制作两个模型:

    1. 订购

    包含:订单号、客户详细信息、创建日期、付款详细信息

    2.OrderItem

    含:产品、价格、数量、折扣、SKU

    并在 Order 模型中使用 OrderItem 作为内联

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2014-10-17
      • 2023-03-19
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2022-11-01
      相关资源
      最近更新 更多