1 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
使用您擁有的模型,您需要將過濾器中的多個(gè)查找鏈接在一起:
characters = Character.objects.filter(scenes__episode__season__show_id=show_id)
話雖這么說,我建議稍微修改一下您的架構(gòu),因?yàn)檫@個(gè)查詢非常昂貴。
如果您將 a 添加ManyToManyField到Show模型(并填充表),則會將此查詢轉(zhuǎn)換為簡單的M2M查找:
class Show(models.Model):
characters = models.ManyToManyField(Character)
...
characters = Show.objects.get(id=show_id).characters.all()
對于 而言prefetch_related,它只是一種防止多次數(shù)據(jù)庫命中的優(yōu)化。
第一個(gè)查詢分別訪問數(shù)據(jù)庫 4 次,但如果添加預(yù)?。?/p>
characters = Character.objects.prefetch_related(
'scenes', 'episode', 'season', 'show'
).filter(scenes__episode__season__show_id=show_id)
它只訪問數(shù)據(jù)庫一次,并在 python 中完成所有連接。
添加回答
舉報(bào)