Django建立依赖关系模型并转移所有权 [英] Django models dependencies and transfer ownership
本文介绍了Django建立依赖关系模型并转移所有权的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试构建的是一个可以处理蜂蜜生产管理的应用程序。 有许多生产蜜罐的生产商,他们可以把他们的蜜罐提供给各种有客户的商店。一个生产商可以将他的产品提供给许多商店,一个商店可以有来自许多生产商的蜜罐。蜜罐可以通过pot_id进行跟踪。Mods.py如下所示:
class Produser(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
class Store(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
produser= models.ManyToManyField(Produser)
class Customer(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
store = = models.ForeignKey(Store, on_delete=models.CASCADE)
class HoneyPot(models.Model):
produced_date = models.DateField(auto_now=False)
pot_id = models.CharField(max_length=25, blank=False)
produser= models.ForeignKey(Produser, on_delete=models.CASCADE)
store= models.ForeignKey(Store, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
我正在努力寻找如何修改模型,使之成为一个锅的所有者,或由生产商、商店或客户拥有。就像现在创建新罐子时一样,商店和客户是必填字段。
推荐答案
可以说<[2-0]、Store
和Customer
都有一个共同点,就是可以拥有一个HoneyPot
。这意味着它们是可以拥有HoneyPot
的实体的专门化。要对此建模,我们只需添加一个额外的模型,Produser
、Store
和Customer
都将继承自该模型或与其存在一对一关系。
使用OneToOneField
[Django docs]:
我们只需使用OneToOneField
:
class HoneyPotOwner(models.Model):
PRODUCER = 'P'
STORE = 'S'
CONSUMER = 'C'
TYPE_CHOICES = [
(PRODUCER, 'Producer'),
(STORE, 'Store'),
(CONSUMER, 'Consumer'),
]
owner_type = models.CharField(max_length=1, choices=TYPE_CHOICES)
class Produser(models.Model):
honey_pot_owner = models.OneToOneField(HoneyPotOwner, on_delete=models.CASCADE)
...
class Store(models.Model):
honey_pot_owner = models.OneToOneField(HoneyPotOwner, on_delete=models.CASCADE)
...
class Customer(models.Model):
honey_pot_owner = models.OneToOneField(HoneyPotOwner, on_delete=models.CASCADE)
...
class HoneyPot(models.Model):
produced_date = models.DateField(auto_now=False)
pot_id = models.CharField(max_length=25, blank=False)
owner = models.ForeignKey(HoneyPotOwner, on_delete=models.CASCADE)
使用Multi-table inheritance:
我们可以有Produser
、Store
和Customer
继承自HoneyPotOwner
,这称为多表继承。这隐式地创建了OneToOneField
,但有几个优点使访问相关字段变得更容易:
class HoneyPotOwner(models.Model):
PRODUCER = 'P'
STORE = 'S'
CONSUMER = 'C'
TYPE_CHOICES = [
(PRODUCER, 'Producer'),
(STORE, 'Store'),
(CONSUMER, 'Consumer'),
]
owner_type = models.CharField(max_length=1, choices=TYPE_CHOICES)
class Produser(HoneyPotOwner):
...
class Store(HoneyPotOwner):
...
class Customer(HoneyPotOwner):
...
class HoneyPot(models.Model):
produced_date = models.DateField(auto_now=False)
pot_id = models.CharField(max_length=25, blank=False)
owner = models.ForeignKey(HoneyPotOwner, on_delete=models.CASCADE)
这篇关于Django建立依赖关系模型并转移所有权的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文