我在Django中的模型之间有两个关系,Foo
和Bar
之间有多对多关系,而Foo
上的外键指向Bar
。
当我执行涉及Foo
和Bar
的查询时,django坚持使用外键而不是M2M来进行连接。
(M2M是真实的数据,外键只是一点点缓存,所以我可以获得某种方法创建的最新Bar
。)
例如(其中foos
是Bar
上的多对多关系名称)
Bar.objects.filter(foos__attribute = True)
不返回具有该属性的所有Bar
,而只返回Bar
与FK指向的Foo
。我如何强制它使用M2M?或者这完全是一个坏主意?
答案 0 :(得分:0)
我想通了,它绝对是'应该使用实例代码'的实例。
我在名为'foos'的Bar
表上有多对多的关系(比如说)。外键在related_name
表上自动创建一个名为'foo'的Bar
。我实际上并没有打电话:
Bar.objects.filter(foos__attribute = True)
像我说的那样。我在打电话:Bar.objects.filter(foo__attribute = True)
使用自动创建的外键'foo'的相关名称,而不是多对多表'foos'的名称。
经验教训: