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_id
的 B
个对象。我可以这样做 -
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_id
与 a
.
假设我有两个 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_id
的 B
个对象。我可以这样做 -
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_id
与 a
.