0

ドキュメントに従って、外部キー フィールドで管理者の選択をフィルタリングしようとしています。

私のモデルはとてもシンプルです:

class Page(models.Model):
    title = models.CharField(max_length=50, null=False, blank=False, default="Title")
    layout = models.ForeignKey(Layout, null=False) #This sets the layout for the current page

それを達成するには、次のようなことをする必要があります:

class PageAdmin(admin.ModelAdmin):

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "layout":
            kwargs["queryset"] = Template.objects.get_a_queryset()
        return super(PageAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

それは機能していますが、ページにアクセスするたびに関数を3回実行しているため、合計5回のクエリが発生します(3回とデフォルトで2回)。同じ db_field を 3 回渡しています。

それを1つのクエリだけに減らすにはどうすればよいですか? これは意図した動作ですか? もしそうなら...なぜですか?

4

1 に答える 1

0

何が起こっているのかよくわかりませんが、あなたの方法を示す 2 つのツールがあります。

  1. IPython埋め込み

    from IPython import embed
    ... lots of code ...
    embed()
    

開発サーバーを実行するシェルは、embed() を実行する IPython にドロップされるため、スタックを探索できます。

  1. トレースバックモジュール

    import traceback
    ... lots of code ....
    traceback.print_stack()
    

これによりスタックが出力されるため、3 つの呼び出しを区別できます。

于 2014-10-30T09:21:48.870 に答える