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

  • 本文关键字:属性 区别 过滤 Django django django-1.9
  • 更新时间 :
  • 英文 :


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

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

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_id连接表A,然后通过a过滤a_id

最新更新