我使用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')
现在有两个问题:
我如何实现这一目标?
我不愿意使用自定义SQL,因为这首先会破坏使用django&#ORM的目的。
答案 0 :(得分:1)
你说你想使用Django的ORM,但后来说你想做一些截然相反的事情,即以x.cost
的形式访问费用。
Django不会让你这样做,因为它完全打破了对象模型。 cost
是AppCosts模型的属性,而不是Costs的属性。如果它真的困扰你,你可以在费用上添加property
,返回self.appcosts.cost
,只要您不尝试在其中使用它就会执行您想要的操作查询。