Dav*_*983 1 django foreign-keys django-models many-to-one
我有一定数量的产品清单,我需要在Django中对其建模。
每个订单都具有以下属性:
id
email
total_price
line_items
Run Code Online (Sandbox Code Playgroud)
line_items是产品和所需产品实例数的字典。
产品是描述一类产品的单独模型。
我需要在产品和订单之间建立多对多关系,因为每个产品可能是许多订单的一部分,但是每个订单可能有很多产品-如果我的订单中有3个实例,这在我的字段中看起来如何?一个产品,另外2个,等等...?
line_items是产品字典以及所需产品实例的数量。
我建议不要将其存储在字典中。在关系数据库中,通常将其存储在多个记录的不同表中。这样做的好处是查询起来很容易。例如,生成包含某个产品或数量大于50的某个产品的所有订单的列表。
因此,我们通常有三个表:
+-------+ 1 N +--------------+ N 1 +---------+
| Order |----------| OrderProduct |----------| Product |
+-------+ +--------------+ +---------+
| email | | quantity |
+-------+ +--------------+
Run Code Online (Sandbox Code Playgroud)
因此Order,我们有三个模型:OrderProduct和Product,例如:
Order(models.Model):
email = models.EmailField()
Product(models.Model):
# ...
pass
OrderProduct(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
class Meta:
unique_together = ('order', 'product')
Run Code Online (Sandbox Code Playgroud)
因此,我们可以构建一个像这样的订单:
product1 = Product.objects.create()
product2 = Product.objects.create()
my_order = Order.objects.create(email='foo@bar.com')
OrderProduct.objects.create(product=product1, order=my_order)
OrderProduct.objects.create(product=product2, order=my_order, quantity=14)
Run Code Online (Sandbox Code Playgroud)
因此,在这里我们构造了两个产品和一个订单,然后OrderProduct在该订单中添加了两个,一个用于product1,一个用于product2与的数量14。
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |