【发布时间】:2011-09-06 16:02:28
【问题描述】:
我正在从现有数据库构建一个 django 应用程序。不管是好是坏,我有几个观点想作为我的模型的基础。它们看起来像这样:
class Device(Model):
id = models.IntegerField( primary_key=True, db_column='node_id' )
name = models.CharField(max_length=127, db_column='node' )
class Meta:
db_table = 'node' # db view
managed = False
class Entity(Model):
id = models.IntegerField( primary_key=True, db_column='_id' )
device = models.ForeignKey(Device, db_column='node_id' )
class Meta:
db_table = 'entity' # db view
managed = Fase
所以一切正常。但是,当我尝试使用使用 ForeignKey 的模板时,速度非常慢:
{% for e in entities %}
{{ e.device.name }}
{% endfor %}
查看日志,它似乎对每个“node_id”重复查询,并最终超时。
(当然,如果我不包括e.device.name 很快)
有什么办法可以优化吗?
公平地说,“实体”视图已经将设备名称作为另一个字段 (node),所以我可以使用它来代替,但我希望这种关系存在。
【问题讨论】:
-
尝试将 db_column='node_id' 更改为 db_column='id'。我不确定,但 node_ 前缀可能是从 db_table 元选项中推断出来的
-
底层实体视图实际上对节点的id引用为
node_id;所以输入id实际上失败了"Unknown column 'entity.id' in 'field list'"
标签: database django view foreign-keys