【发布时间】:2017-11-26 21:31:24
【问题描述】:
我将 Django amdin 用于我的一个数据模型。我想在每个模型的管理 UI 上显示自定义值。 在 db 上,单个查询的结果在 django admin 上作为多个查询运行,每行一个 我试图避免这种情况。
这是我的模型:
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)
对于第二个模型,在加载页面时,我看到的每一行都有 2 个查询在单词表上运行,另一个在含义表上运行。 (来自调试工具栏)
我尝试通过使用以下选项来避免这种情况。
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 个查询。但是由于对模型的依赖在一个查询的连接中有两个以上的表,它仍然会消耗时间。所以我的问题不是为每一行运行 1 个查询,我们可以直接为每一页显示查询结果吗?
例如页面上以下查询的结果:
select * from table ;
而不是
select * from table when id=1;
select * from table when id=2;
.
.
.
非常感谢任何帮助。谢谢
【问题讨论】:
标签: python mysql django django-models django-admin