ドキュメントに従って、外部キー フィールドで管理者の選択をフィルタリングしようとしています。
私のモデルはとてもシンプルです:
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つのクエリだけに減らすにはどうすればよいですか? これは意図した動作ですか? もしそうなら...なぜですか?