我正在开发一个使用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开发的初学者。如果Bill包含单个产品,那么我可以编写其视图。但是如何存储具有不同数据的多个产品并将其存储在数据库中。
例如
用户将输入客户的姓名和地址。然后用户将输入产品的详细信息。现在我想多次生成Product modelform(取决于用户添加的产品数量)。我怎么能做到这一点?
答案 0 :(得分:0)
假设
1)可以一次购买多个产品(因此成为一个账单的一部分)和
2)一个产品可以随时多次购买(因此成为许多账单的一部分)
一个简单的外键是错误的建模尝试。您需要 m:n 关系,而不是 m:1 关系,而不是ManyToManyField。使用ManyToManyField,您可以将多个产品添加到一个帐单中,或者将多个产品添加到多个帐单中。在django-admin中,将ManyToManyFields设置为filter_horizontal
非常有用(我推荐它),这样可以简化这个字段的使用。
另外,django会自动解析您与其他第三个数据库表的 m:n 关系,因此您无需处理此问题。