にModelAdmin
外部キー フィールドを含むクラスがありますlist_display
。しかし、そのモデルの管理者リスト ページでは、結合 ( ) ではなく、1 行に 1 つのクエリを実行して、他のテーブルからデータを取得する、何百ものクエリを実行していますselect_related()
。
Django docsは、これをなくすために ModelAdmin に属性として追加できることを示していますが、私にとってはまったく機能していないようです。This SO questionは同様の問題を引き起こしているようですが、彼の解決策は不明であり、私の場合はうまくいきません。list_select_related = True
これが私のモデルとモデル管理者の縮小版です:
class Device(models.Model):
serial_number = models.CharField(max_length=80, blank=True, unique=True)
label = models.CharField(max_length=80, blank=True)
def __str__(self):
s = str(self.serial_number)
if self.label:
s += ': {0}'.format(self.label)
return s
class Event(models.Model):
device = models.ForeignKey(Device, null=True)
type = models.CharField(max_length=40, null=False, blank=True, default='')
class EventAdmin(admin.ModelAdmin):
list_display = ('__str__', 'device')
list_select_related = True
ただし、それを追加してlist_selected_related = True
も何も変わりませんでした。SQL 結合の代わりに、このような多くのクエリを取得します。
Django 管理者が list_select_related を無視して N 個のクエリを実行しているように見える理由はありますか? Python 2.7 と Django 1.3.3 を使用しています。