Django使用错误的外键进行连接

时间:2011-09-26 23:08:47

标签: python django

我在Django中的模型之间有两个关系,FooBar之间有多对多关系,而Foo上的外键指向Bar

当我执行涉及FooBar的查询时,django坚持使用外键而不是M2M来进行连接。

(M2M是真实的数据,外键只是一点点缓存,所以我可以获得某种方法创建的最新Bar。)

例如(其中foosBar上的多对多关系名称)

Bar.objects.filter(foos__attribute = True)

不返回具有该属性的所有Bar,而只返回Bar与FK指向的Foo。我如何强制它使用M2M?或者这完全是一个坏主意?

1 个答案:

答案 0 :(得分:0)

我想通了,它绝对是'应该使用实例代码'的实例。

我在名为'foos'的Bar表上有多对多的关系(比如说)。外键在related_name表上自动创建一个名为'foo'的Bar。我实际上并没有打电话:

Bar.objects.filter(foos__attribute = True)

像我说的那样。我在打电话:

Bar.objects.filter(foo__attribute = True)

使用自动创建的外键'foo'的相关名称,而不是多对多表'foos'的名称。

经验教训:

  • 不要让django为您决定相关名称
  • 小心多元化!
  • 在SA上发布实例