django - Django过滤外键属性,显式和隐式外键属性命名的区别
问题描述
假设我有两个model
s -
class A(models.Model):
a_id=models.CharField(max_length=255,primary_key=True)
a_name=models.CharField(max_length=255)
class B(models.Model):
a=models.ForeignKey(A)
b_name=models.CharField(max_length=255)
我想过滤B
属于特定a_id
. 我可以这样做 -
B.objects.filter(a=a_id)
或者
B.objects.filter(a__a_id=a_id)
两者在效率、速度或功能方面有什么区别吗?
解决方案
B.objects.filter(a=a_id)
效率更高,因为它只是过滤值B.a
并完全避免加入表A
,同时B.objects.filter(a__a_id=a_id)
需要加入表A
,a_id
然后a_id
使用a
.