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

Django filtering on foreign key properties, difference between explicit and implicit foreign key property naming

假设我有两个 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)

我想筛选属于特定 a_idB 个对象。我可以这样做 -

B.objects.filter(a=a_id)

B.objects.filter(a__a_id=a_id)

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

B.objects.filter(a=a_id) 效率更高,因为它只是过滤 B.a 的值并避免完全加入 table A,而 B.objects.filter(a__a_id=a_id) 需要加入 table A 通过 a_id 然后过滤 a_ida.