はじめに generic foreignkey 自体のprefetchはできる。しかし、その更に先のrelationをprefetchすることができない。これをどうにかしようと言う苦肉の策を考えてみたという話。 言い訳 djangoのgeneric foreignkey関連のコードを読んでみたところ綺麗にできる方法は無さそうだった。実行時のprefetchの条件を上手く受け渡す方法が存在しなさそうだったので。仕方がないので thread localなcontext objectを作りそこでprefetchの条件を指定できるようにする。 概要 以下の様な形のモデルになっているとする。 Feed -- generic foreign key --> cotent = {A,B,C} A -- 1:N --> xs = {X} B -- 1:N --> ys = {Y} C X Y Feedとい