【发布时间】:2014-03-21 10:47:19
【问题描述】:
我有两个来自旧数据库的表,使用 inspectdb 导入到我的 django 应用程序
这是我的模型定义
class AppCosts(models.Model):
cost = models.DecimalField(max_digits=10, decimal_places=2)
class AppDefinitions(models.Model):
data = models.TextField()
permissions = models.CharField(max_length=50, blank=True)
appcost=models.OneToOneField(AppCosts, db_column='id')
AppDefinitions 中的每个应用程序在 AppCosts 中都有一个条目 - 一对一的关系
当我使用 select_related() 时,我得到:
>>> AppDefinitions.objects.select_related().query.__str__()
u'SELECT _app_definitions.id, _app_definitions.data,
_app_definitions.permissions, _app_definitions.id, _app_costs.id,
_app_costs.cost FROM _app_definitions INNER JOIN _app_costs
ON ( _app_definitions.id = _app_costs.id )'
>>> a = AppDefinitions.objects.select_related().first()
>>> a.id
u'abaqus'
>>> a.cost
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'AppDefinitions' object has no attribute 'cost'
>>> a.appcost
<AppCosts: abaqus,1.50>
>>> a.appcost.cost
Decimal('1.50')
现在有两个问题:
- 查询从两个字段中提取 id 两次(没什么大不了的,因为该表最多不会有超过几百个条目,但我仍然希望它是正确的)
- 我必须以 x.appcost.cost 的形式访问成本,而不是简单的 x.cost
我如何做到这一点?
我不愿意使用自定义 SQL,因为这首先会破坏使用 django 的 ORM 的目的。
【问题讨论】: