Django 中的中间字段 | Python
先决条件: Django 模型,Django 中的关系字段
在 Django 中,两个模型 A 和 B 之间存在多对多关系,当 A 的一个实例与 B 的多个实例相关时,反之亦然。例如 - 在商店管理系统中,商品和客户共享多对多关系,因为一个客户可以购买多个商品,而多个客户可以购买同一商品。
但是,可能有一些字段既不是特定于客户,也不是特定于所购买的商品,而是特定于客户购买的商品。例如购买数量购买日期等。为了存储这些中间数据,我们需要中间模型。我们需要通过 ManyToManyField 中的参数来指定中间模型。
对于我们的示例,代码看起来像这样。
Python3
from django.db import models
class Item(models.Model):
name = models.CharField(max_length = 128)
price = models.DecimalField(max_digits = 5, decimal_places = 2)
def __str__(self):
return self.name
class Customer(models.Model):
name = models.CharField(max_length = 128)
age = models.IntegerField()
items_purchased = models.ManyToManyField(Item, through = 'Purchase')
def __str__(self):
return self.name
class Purchase(models.Model):
item = models.ForeignKey(Item, on_delete = models.CASCADE)
customer = models.ForeignKey(Customer, on_delete = models.CASCADE)
date_purchased = models.DateField()
quantity_purchased = models.IntegerField()
Python3
i = Item.objects.create(name = "Water Bottle", price = 100)
c = Customer.objects.create(name = "Abhishek", age = 21)
p = Purchase(item = i, customer = c,
date_purchased = date(2019, 7, 7),
quantity_purchased = 3)
p.save()
Python3
c.items_purchased.all()
Python3
i.customer_set.all()
现在让我们看看我们如何创建购买模型的实例。
Python3
i = Item.objects.create(name = "Water Bottle", price = 100)
c = Customer.objects.create(name = "Abhishek", age = 21)
p = Purchase(item = i, customer = c,
date_purchased = date(2019, 7, 7),
quantity_purchased = 3)
p.save()
Python3
c.items_purchased.all()
]>
Python3
i.customer_set.all()
]>