Django中的OneToOneField和ForeignKey有什么区别?
当前回答
ForeignKey是一个多对一的关系。因此,Car对象可能有许多Wheel实例。因此,每个Wheel都有一个它所属的Car的ForeignKey。OneToOneField就像Engine的一个实例,其中Car对象最多只有一个。
其他回答
此外,OneToOneField可用作主键以避免键重复。可能没有隐式/显式autofield
models.AutoField(primary_key=True)
但是使用OneToOneField作为主键(假设UserProfile模型为例):
user = models.OneToOneField(
User, null=False, primary_key=True, verbose_name='Member profile')
OneToOneField(一对一)在面向对象中实现了组合的概念,而ForeignKey(一对多)则与聚合有关。
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值相对应的记录。
ForeignKey允许你接收子类,它是另一个类的定义,但OneToOneFields不能这样做,它不能附加到多个变量
OneToOneField(例如:一辆车有一个车主) ForeignKey(OneToMany)(例如:一个餐厅有很多项目)
推荐文章
- 如何从外部访问本地Django web服务器
- 在Django模型中存储电话号码的最佳方法是什么?
- 如何禁用django-rest-framework的管理风格的可浏览界面?
- 如何获取请求。Django-Rest-Framework序列化器中的用户?
- 如何在Django模板中获得我的网站的域名?
- 在django Forms中定义css类
- 我应该在.gitignore文件中添加Django迁移文件吗?
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何选择一个记录和更新它,与一个单一的查询集在Django?
- Django REST框架:向ModelSerializer添加额外字段
- 如何在django上自动化createsuperuser ?
- 如何将Django QuerySet转换为列表?
- 如何直接从测试驱动程序调用自定义的Django manage.py命令?
- 在Python Django中运行单元测试时,如何禁用日志记录?
- Django CSRF检查Ajax POST请求失败