Django过滤外键属性,显式和隐式外键属性命名之间的区别

时间:2018-07-24 06:30:20

标签: django django-1.9

假设我有两个model-

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的{​​{1}}个对象。我可以做到这一点-

a_id

B.objects.filter(a=a_id)

两者在效率,速度或功能上是否有区别?

1 个答案:

答案 0 :(得分:1)

B.objects.filter(a=a_id)的效率更高,因为它仅过滤B.a的值并避免完全连接表A,而B.objects.filter(a__a_id=a_id)要求通过以下方式连接表A a_id,然后用a_id过滤a