私はいくつかのモデルを持っています:Review
はアルバム レビュー用のフィールドを持ち、Record
はアルバムの名前などでありBand
、 はバンドの名前です。Record
に対して外部キーがあり、 に対してBand
外部Review
キーがありますRecord
。
Review
すべての のドロップダウン選択ボックスを表示したいの管理フォームでRecord
。現時点では、 の unicode メソッドRecord
は次のとおりです。
def __unicode__(self):
return self.record_name
これはあまり役に立たないので、次のように変更しました。
def __unicode__(self):
return self.band.band_name + ' - ' + self.record_name
これにより、それぞれRecord
(3000 程度) に対してクエリが追加されますが、明らかに良くありません。
この回答を読んで、これをモデル管理者に追加しようとしましたRecord
:
def queryset(self, request):
return super(RecordAdmin, self).queryset(request).select_related('band')
しかし、これは何の違いもありませんでした。
__unicode__
n-squared クエリを発生させずに、モデルの表現で外部キー フィールドを使用することは可能ですか?
更新:モデルは次のとおりです(無関係なフィールドは削除されています):
class Review(models.Model):
def __unicode__(self):
# this is used in other places where we show review titles
return self.record.band.band_name + ' - ' + self.record.record_name
record = models.ForeignKey('Record')
review_text = models.TextField()
class Record(models.Model):
def __unicode__(self):
# this generates a billion queries
#return self.record_name
return self.band.band_name + ' - ' + self.record_name
def band_and_title(self):
return self.band.band_name + ' - ' + self.record_name
band = models.ForeignKey('Band')
label = models.ForeignKey('Label')
record_name = models.CharField(max_length=175)
class Band(models.Model):
def __unicode__(self):
return self.band_name
band_name = models.CharField(max_length=100)