gpt4 book ai didi

django - Django OneToOneField-我应该放在哪个模型中?

转载 作者:行者123 更新时间:2023-12-04 00:04:04 24 4
gpt4 key购买 nike

假设我们有以下模型。

class A(Model): pass
class B(Model): pass


然后,两者之间没有区别:

在模型A中: b = OneToOneField(B, related_name=A.__name__)



在模型B中: a = OneToOneField(A, related_name=B.__name__)

因此,我应该问自己哪些问题来决定是否将OTO放在一种或另一种模型中。我的意思是像has-a,is-a等。

最佳答案

实际上,放置一对一字段的地方有所不同,因为删除的行为不同。删除对象时,所有其他具有一对一关系的对象都将被引用。相反,如果删除包含一对一字段的对象(即,它引用其他对象,但其他对象未引用该对象),则不会删除其他对象。

例如:

class A(models.Model):
pass

class B(models.Model):
a = models.OneToOneField(A)


如果删除A,默认情况下也会删除B(尽管您可以通过修改OneToOneField的on_delete参数来覆盖它,就像使用 ForeignKey一样)。删除B不会删除A(尽管您可以通过覆盖B的delete()方法来更改此行为)。

回到关于has-a与is-a的最初问题,如果A具有B,则B应该具有一对一字段(B仅在A存在的情况下存在,而A在没有B的情况下可以存在)。

关于django - Django OneToOneField-我应该放在哪个模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com