如何在 Django 中创建多对多关系
How to create a Many to Many Relation in Django
我是 Django 的新手,我一直在尝试创建一个模型,我有很多仓库和很多产品。到目前为止,我已经做到了:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
quantity = models.IntegerField()
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
products = models.ManyToManyField(Product)
def __str__(self):
return self.name
但问题是,一个产品可以在多个不同数量的仓库中,我不知道如何建模。
谢谢
我要添加第三个模型:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
def __str__(self):
return self.name
class Catalogue(models.Model):
products = models.ForeignKey(Product)
warehouse = models.ForeignKey(Warehouse)
quantity = models.IntegerField()
您可以使用 ManyToMany
关系的属性 through
。参见 HERE。
结果会是:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
products = models.ManyToManyField(Product, through='Catalog')
def __str__(self):
return self.name
class Catalog(models.Model):
products = models.ForeignKey(Product, on_delete=models.CASCADE)
warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
quantity = models.IntegerField()
请参阅 Warehouse
class 中的 products
字段:
products = models.ManyToManyField(Product, through='Catalog')
文档中有一个full example。
我是 Django 的新手,我一直在尝试创建一个模型,我有很多仓库和很多产品。到目前为止,我已经做到了:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
quantity = models.IntegerField()
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
products = models.ManyToManyField(Product)
def __str__(self):
return self.name
但问题是,一个产品可以在多个不同数量的仓库中,我不知道如何建模。
谢谢
我要添加第三个模型:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
def __str__(self):
return self.name
class Catalogue(models.Model):
products = models.ForeignKey(Product)
warehouse = models.ForeignKey(Warehouse)
quantity = models.IntegerField()
您可以使用 ManyToMany
关系的属性 through
。参见 HERE。
结果会是:
class Product(models.Model):
idProduct = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Warehouse(models.Model):
idWareouse = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
products = models.ManyToManyField(Product, through='Catalog')
def __str__(self):
return self.name
class Catalog(models.Model):
products = models.ForeignKey(Product, on_delete=models.CASCADE)
warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
quantity = models.IntegerField()
请参阅 Warehouse
class 中的 products
字段:
products = models.ManyToManyField(Product, through='Catalog')
文档中有一个full example。