1

Django コメントで select_related() を「user」フィールドで使用することにより、不要な SQL クエリを削減するという問題を扱っているこのスレッドを読みました。

私が最も気に入っている提案は、独自のコメント モデルを作成し、現在使用されているマネージャーをオーバーライドすることです。

これは私が持っているものです:

#models.py
class LightCommentManager(CommentManager):
    def get_query_set(self):
        qs = (super(CommentManager, self).get_query_set().select_related('user'))
        return qs

class LightComment(Comment):
    objects = LightCommentManager()
    class meta:
        managed = False

これはすべて正常に機能しますが、syncdb を実行すると、Django は引き続き LightComment のテーブルを作成します。マネージャーだけを変更する場合、このテーブルが本当に必要ですか? また、マネージドが false に設定されている場合、Django はなぜテーブルを作成するのですか?

前もって感謝します、

4

1 に答える 1

2

まず、内部クラスはMetaではなくと呼ぶ必要がありmetaます。

ただし、 ではなく、別の実際のモデルではなくプロキシ モデルを作成していることを示すためmanaged = Falseに使用する必要があります。proxy = True

于 2014-03-24T15:54:10.507 に答える