说我有一个这样的模型。
class Job(models.Model):
client = models.ForeignKey(Contacts, null=True)
并说我有工作j。我知道我可以像这样访问属于j的客户端
j.client
但也有
j.client_id
所以我的问题是访问j.client如何工作?
django是否存储了client__id,然后在调用j.client时执行查询以查找正确的对象?
还是将对象引用存储到j并访问client__id是从Contact对象获取ID?
我已经查看了一下源代码,但是找不到我的问题的答案
最佳答案
在文档中对此进行了解释:
https://docs.djangoproject.com/en/dev/ref/models/fields/#database-representation
在数据库中,只有client_id
字段(单个下划线)
在模型实例上,您将具有client
属性,当您访问它时,这将导致Django从db加载相关对象并将其实例化为另一个模型实例。
您还将拥有client_id
属性(一个下划线),该属性具有相关对象的主键值,存储在db字段中。
在执行ORM查询时,您可以使用client__id
(双下划线)语法在相关模型上查找字段,例如,如果client__name
模型具有Client
字段,则您也可以执行name
。这将成为两个模型之间的SQL JOIN查询。
例如
Job.objects.get(client__id=1)
Job.objects.filter(client__name='John')
client = Client.objects.get(pk=1)
Job.objects.get(client=client)
关于python - Django外键访问如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24892148/