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

标签 django one-to-one

假设我们有以下模型。

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/

相关文章:

python - 当 QuerySet 加载实例时,Django 会发送信号 pre_init/post_init 吗?

python - Django FileField.save() 生成重复文件

android - GreenDAO ToOne 关系不起作用

hibernate - 关于 Jpa 和 Hibernate 双向一对一的 N+1 问题

Django,限制访问注册成功页面

python - Dokku:setuidgid:致命:无法运行gunicorn:文件不存在

Django:从字典列表批量更新而不构建整个查询集

java - Hibernate JPA一对一保存子类实体

Django 管理员 : How to display value of fields with list_display from two models which are in oneToOne relation?

java - Entity中两个几乎相同的OneToOne,自定义连接注解