【发布时间】:2018-08-14 08:55:24
【问题描述】:
假设我有一个模型 Profile 通过 ForeignKey 与 unique=True 关系或 OneToOne 关系与标准 User 模型相关:
class Profile(models.Model):
user = (either a ForeignKey/OneToOne relationship)
...
如果我理解了文档,该列的数据库表示将是user_id,从 Django 自动添加_id。此 user_id 将包含一系列整数。
假设我再次在 shell 中实例化这个模型的一个对象,并尝试访问 user 属性:
a_profile = Profile()
a_profile.user
根据我的阅读,在“ForeignKey”关系的情况下,user 属性现在应该是一个描述符,访问它会调用它的 __get __ 方法,让我可以访问相关的模型实例 -在本例中为 User 实例。
我的问题:
我注意到我也可以通过 User 实例访问 Profile 实例,具有OneToOne 关系,通过:
user_profile = User.objects.all()[0]
user_profile.profile
当我做同样的事情但有ForeignKey 关系时,我得到一个查询集。
幕后发生了什么?具有OneToOne 关系的Profile 实例上的user 属性也是一个描述符,其工作方式与ForeignKey 关系的情况相同吗?
谢谢!
【问题讨论】:
-
Django 会自动创建反向引用。你可以在这里阅读一些关于它的东西docs.djangoproject.com/en/2.0/ref/models/fields/…
标签: python django foreign-keys models