我有如下模型(部分)模型定義:如何保持的Django從創建加入對父=無
class Album(models.Model):
name = models.CharField(max_length=50,
null=False,
blank=True)
parent = models.ForeignKey("self",
null = True,
default = None,
blank = True,
help_text="Points to a parent album",
related_name="children")
當我運行manage.py debugsqlquery
並檢查生成的查詢,我得到一個加入該不該在那裏:
>>> a_qs = Album.objects.filter(parent=None)
>>> for a in a_qs:
... print a
...
結果查詢是:
SELECT "photos_album"."id",
"photos_album"."name",
"photos_album"."parent_id",
"photos_album"."owner_id",
"photos_album"."order",
"photos_album"."system",
"photos_album"."created",
"photos_album"."last_modified"
FROM "photos_album"
LEFT OUTER JOIN "photos_album" T2 ON ("photos_album"."parent_id" = T2."id")
WHERE T2."id" IS NULL
ORDER BY "photos_album"."order" ASC, "photos_album"."name" ASC [0.42ms]
我試圖擺脫LEFT OUTER JOIN
我試過parent_id=None
,parent__isnull=True
和parent_id__isnull=True
和所有生成連接。
如何在不創建連接的情況下執行查詢?
不是一個真正的答案。當它是問題的正確答案時,我使用MPTT。這不是一個通用的樹問題。這是django在創建'JOIN'時不需要的特殊問題。整個'LEFT OUTER JOIN ... WHERE T2。「id」IS NULL'應該簡化爲WHERE「photos_album」。「parent_id」IS NULL' – ctjctj2