【问题标题】:How to save the data that has same model but with different data in Django如何在Django中保存具有相同模型但具有不同数据的数据
【发布时间】:2018-01-30 00:07:36
【问题描述】:

我正在开发一个使用 Django 1.8 的迷你项目。目的是构建一个小型计费应用程序。所以,我创建了两个模型,Bill 和 Product,如下所示。

#bill/models.py

class Bill(models.Model):
  date_of_issue = models.DateField()
  name = models.CharField(max_length=50, default="N/A", null=True)
  address = models.CharField(max_length=150, default="N/A", null=True)
  created = models.DateTimeField(auto_now_add=True)
  modified = models.DateTimeField(auto_now=True)

def __str__(self):
    return "{} {}".format(self.input_name, self.date_of_issue)

class Product(models.Model):
  bill = models.ForeignKey(Bill, on_delete=models.CASCADE)
  description = models.CharField(max_length=100, default="N/A")
  quantity = models.IntegerField(default=0)
  total = models.IntegerField(default=0)

通过查看模型,您可以看出我的方法是创建 Bill 和 Product 表,并通过 ForeignKey 将 Product 连接到 Bill。现在,问题是一张账单将包含至少一种产品。如果有多个产品,我应该如何在 views.py 中写下我的观点。我是 Django 开发的初学者。如果账单包含单个产品,那么我可以编写它的视图。但是如何存储多个具有不同数据的产品并将其存储在数据库中。

举例

用户将输入客户的姓名和地址。然后用户将输入产品的详细信息。现在我想多次生成产品模型表单(取决于用户添加的产品数量)。我怎样才能做到这一点?

【问题讨论】:

  • 我建议您查看 Northwind 数据库的 ERD,我认为它会帮助您可视化您需要的内容。有各种版本,但我认为这是原版。 ariacom.com/images/Northwind%20ERD.png
  • 表单集,教程 - 所有这些都会有所帮助。关于您的模型的一些具体点: 1 - 您当前的设置实际上是订单主控 + 订单详细信息。它不允许重复使用产品 - 即,每个“产品”只是订单上的一行 - 您可能希望 Product 是实际产品和 LineItems 或 OrderDetail 或类似连接订单和产品的东西 - 基本设计问题取决于你想要做什么; 2 - 你有数量和总量,但没有单价;许多地方的 3 总计(和单价)需要小数而不是整数,但这取决于您的当地货币。

标签: python django database django-models django-forms


【解决方案1】:

假设

1) 可以一次购买多种产品(因此成为一张账单的一部分)并且

2) 一种产品可以随时购买多个(因此是许多账单的一部分)

简单的外键是错误的建模尝试。您需要 m:n 关系而不是 m:1 关系 - 因此需要 ManyToManyField。使用 ManyToManyField,您可以将多个产品添加到一个帐单或将多个产品添加到多个帐单。在 django-admin 中,将 ManyToManyFields 设置为 filter_horizontal 很有用(我推荐它),这样可以简化该字段的使用。

另外,django 会自动解析你的 m:n 与额外的第三个数据库表的关系,所以你不需要照顾这个。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多