0
原來的問題造成相當尷尬的循環模型引用:錯誤GROUP BY字段在Django註釋查詢
# A -> B -> A
class A:
b = models.ForeignKey('B', null=True, blank=True)
class B:
a = models.ForeignKey('A')
現在,當我試圖詮釋查詢,它總是使用GROUP BY從LEFT OUTER一個的ID JOIN(T3.id在下面的示例中)而不是a.id。
例子:
A.objects.select_related('b', 'b__a').annotate(reviews=Count('reviews'))
生成的SQL:
SELECT
`a`.`id`,
`b`.`id`,
T3.`id`,
FROM
`a`
LEFT OUTER JOIN
`b` ON (`a`.`b_id` = `b`.`id`)
LEFT OUTER JOIN
`a` T3 ON (`b`.`a_id` = T3.`id`)
WHERE
`a`.`id` IN (1, 2, 3, 4, 5)
GROUP BY T3.`id`
ORDER BY NULL;
我知道我可以做接下來的事情就:
- 更改模式不做循環引用(可惜不能做那現在)
- 可以使用.extra()而不是註釋(我會盡量避免吧)
- 刪除.select_related()調用(不能做的,由於性能問題)
UPD:使用GROUP BY T3.id將排除結果,其中AB = =無
對我來說最好的解決方案就是在GROUP BY子句中指定正確的字段,但我不知道如何。可能嗎?有沒有其他方法可以解決這個問題?謝謝。
的問題不是'T3 ==了','從一個爲T3'?不知道你想在這裏實現什麼.. – mccc
使用GROUP BY T3.id排除了a.b == None的結果,同時它不是預期的。 – ZAN
至於我想達到的目標 - 一個模型可以通過B具有父對象。我知道這不是最好的方法,但它是一種模型演變。 – ZAN