首页 > 解决方案 > Django过滤外键属性,显式和隐式外键属性命名的区别

问题描述

假设我有两个models -

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)

两者在效率、速度或功能方面有什么区别吗?

标签: djangodjango-1.9

解决方案


B.objects.filter(a=a_id)效率更高,因为它只是过滤值B.a并完全避免加入表A,同时B.objects.filter(a__a_id=a_id)需要加入表Aa_id然后a_id使用a.


推荐阅读