「どう書く?org」(ベータ版)を公開しました [Main] Python4JS and KEMURI Interperer on it

[Django(1)]

Pythonで関数名を安全に変更する[Python(18)]Python4JS and KEMURI Interperer on it

大きなテーブルへのForeignKeyにはraw_id_admin=True

どう書くorgは Djangoを使って作られていて、 下のような管理画面が

下のようなモデルの定義から自動的に生成されます。

class Comment(models.Model):
    topic = models.ForeignKey("Topic", null=True, blank=True)
    parent = models.ForeignKey("self", null=True, blank=True)
    create_date = models.DateTimeField()
    author = models.ForeignKey(User, null=True)
    body = models.TextField(blank=True)

すごく楽ちんだったのですが、どう書くorgがにぎわってコメント数が増えてくるに従って どんどん重たくなってきました。

理由はとても簡単で、この自動生成されたリストの部分で、 数千件あるすべてのコメントをデータベースから取ってきて文字列にする処理が行われるからです。

↑数千件がリストの中に…

このせいでページを開くだけで30秒程度かかっていました。 この問題はどうすれば解決できるか。 実はすごく簡単で、フィールドの定義にrw_id_admin=Trueをつけるだけでした。

-   parent = models.ForeignKey('self', null=True, blank=True)
+   parent = models.ForeignKey('self', null=True, blank=True, raw_id_admin=True)
このオプションをつけるとすべてを読み込んでリスト表示する代わりに、 下のようなIDを入れる欄と虫眼鏡アイコンが表示されます。

虫眼鏡アイコンを選ぶとアイテムの一覧が別ウィンドウで開きます。

テーブルが大きくなってくるとリスト表示では探すのも面倒になるので、 大きくなりそうなテーブルへForeignKeyを張っているなら今のうちにraw_id_adminをつけておくのも手かもしれません。