私のデータモデルの1つにDjango amdinを使用しています。私は各モデルの管理UIにカスタマイズされた値を表示したい。 dbでは、単一のクエリの結果は、django adminで複数のクエリとして実行され、各行に対して1つずつ表示されます。 私はそれを避けようとしています。私が見た行ごとに、ページのロード中の単語のテーブルの上に1と意味のテーブルの上に他のを実行している2つのクエリがあり、第2のモデルについては複数のクエリを避けてDjango管理者のモデルデータを表示する
class words(models.Model):
word_id=models.AutoField(primary_key=True)
word=models.CharField(max_length=200,unique=True)
def __unicode__(self):
return '%s - %s' % (self.word,self.word_id)
class meanings(models.Model):
id=models.AutoField(primary_key=True)
word_id=models.ForeignKey(words,on_delete=models.CASCADE,db_column='word_id')
meaning=models.CharField(max_length=200)
def __unicode__(self):
return '%s %s %d ' % (self.spelling_id.spelling,self.meaning,self.id)
:ここ
は私のモデルです。 (デバッグツールバーから)私は以下のオプションを使用して回避しようとしました。
models.py:
class meanings(models.Model):
meaning_id=models.AutoField(primary_key=True)
word_id=models.ForeignKey(words,on_delete=models.CASCADE,db_column='word_id')
meaning=models.CharField(max_length=200)
admin.py:
def modified_output(self):
cursor = connection.cursor()
cursor.execute("select word,meaning,id from meanings a,words b where a.word_id=b.word_id and meaning_id= "+str(self.id))
row = dictfetchall(cursor)
a=unicode(row[0]['word'])
b=unicode(row[0]['meaning'])
d=(row[0]['id'])
return '%s %s %d ' % (a,b,d)
meanings.add_to_class("__str__", modified_output)
すぐ行ごとに1つだけのクエリ実行があります。しかし、モデルへの依存性は、クエリの結合で2つ以上のテーブルを持つので、それはまだ時間を消費します。だから私の質問は各行に対して1つのクエリを実行するのではなく、クエリ結果を各ページに直接表示できるかどうかです。ページ上の次のクエリの例結果の
:
select * from table ;
代わりの
select * from table when id=1;
select * from table when id=2;
.
.
.
は
すべてのヘルプは大
私の要件に合ったコードの場所と、複数のテーブルに参加する必要がある場合はどうすればいいですか? – user168983
list_select_relatedはタプルなので、それ以上のことをするために何をすべきかを推測します。これはadmin.pyに入ります。モデルには組み込まれていないため、モデルに実装されていません。基本的に、 'list_select_related'は[query related tools](https://docs.djangoproject.com/ja/1.11/ref/models/querysets/#query-related-tools)を使って正しいことを行います。 – Melvyn
私は参加から必要なものは単語ですが、単語IDではありません、これは私の必要条件にどのように役立つのですか? – user168983