Django中的OneToOneField和ForeignKey有什么区别?


当前回答

此外,OneToOneField可用作主键以避免键重复。可能没有隐式/显式autofield

models.AutoField(primary_key=True)

但是使用OneToOneField作为主键(假设UserProfile模型为例):

user = models.OneToOneField(
    User, null=False, primary_key=True, verbose_name='Member profile')

其他回答

此外,OneToOneField可用作主键以避免键重复。可能没有隐式/显式autofield

models.AutoField(primary_key=True)

但是使用OneToOneField作为主键(假设UserProfile模型为例):

user = models.OneToOneField(
    User, null=False, primary_key=True, verbose_name='Member profile')

OneToOneField(例如:一辆车有一个车主) ForeignKey(OneToMany)(例如:一个餐厅有很多项目)

ForeignKey允许你接收子类,它是另一个类的定义,但OneToOneFields不能这样做,它不能附加到多个变量

OneToOneField:如果第二个表与

table2_col1 = models.OneToOneField(table1,on_delete=models.CASCADE, related_name='table1_id')

Table2将只包含一条对应于table1的pk值的记录,即table2_col1将有一个等于表pk的唯一值

table2_col1 == models.ForeignKey(table1, on_delete=models.CASCADE, related_name='table1_id')

Table2可以包含多条与table1的pk值相对应的记录。

OneToOneField(一对一)在面向对象中实现了组合的概念,而ForeignKey(一对多)则与聚合有关。