📜  Django 中的中间字段 | Python

📅  最后修改于: 2022-05-13 01:54:20.248000             🧑  作者: Mango

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()
]>