django get使用_id无法将关键字解析到字段中

django get使用_id无法将关键字解析到字段中,django,foreign-keys,Django,Foreign Keys,当我这样做时: class Foo(models.Model): name = models.CharField(max_length=20) bar = models.ForeignKey(Branch, null=True) class Bar(models.Model): name = models.CharField(max_length=20) 我得到: x = Foo.objects.get(bar_id=2) bar_id不应该直接使用外键id来查找匹

当我这样做时:

class Foo(models.Model):
    name = models.CharField(max_length=20)
    bar = models.ForeignKey(Branch, null=True)

class Bar(models.Model):
    name = models.CharField(max_length=20)
我得到:

x = Foo.objects.get(bar_id=2)
bar_id不应该直接使用外键id来查找匹配的Foo吗? 我知道我可以先查询db来获取Bar对象,然后在get语句中使用它,但是如果id已经在Foo表中,我是否应该浪费一个查询呢


(我正在为一个遗留项目使用一个旧的django和python:django 1.4 python 2.7.2)

它是带有双下划线的
x=Foo.objects.get(bar\u id=2)


django.

它是带有双下划线的
x=Foo.objects.get(bar\u id=2)


django.

即使SQL表使用
bar\u id
作为ForeignKey的列名称,您也需要这样做

希望Django能够对此进行优化,而不是通过真正的连接来执行查询:

x = Foo.objects.get(bar__id=2)

即使SQL表使用
bar\u id
作为ForeignKey的列名称,您也需要这样做

希望Django能够对此进行优化,而不是通过真正的连接来执行查询:

x = Foo.objects.get(bar__id=2)
>>> print MyModel.objects.filter(bar__id=1).values('pk').query
SELECT "myapp_mymodel"."id" FROM "myapp_bar" WHERE "myapp_mymodel"."bar_id" = 1
# Let's compare this with a real joining... (assuming Bar has a `name` field)
>>> print MyModel.objects.filter(bar__name='Thing').values('pk').query
SELECT "myapp_mymodel"."id" FROM "myapp_bar" INNER JOIN "myapp_bar" ON (
      "myapp_mymodel"."bar_id" = "myapp_bar"."id"
) WHERE "myapp_bar"."name" = Thing