繁体   English   中英

Django:原始查询从表中获取值

[英]Django : Raw query fetching values from table

job = jobs.objects.raw('select j.*, v.ip, v.id , v.name from jobs_jobs as j,clientadmin_virtualmachine as v where (j.ip_id)::int = v.id order by j.date desc')

在pgAdminIII中执行此查询时,它会根据查询从两个表中返回结果,但是当我在django视图中使用相同的结果时,它将仅从第一个表中获取结果,而忽略了v.ip,v.id和v.name字段值。

有什么建议么?

当您使用原始查询时,Django会自动将额外的字段添加到模型实例(在本例中为Job)。 但是,当列名重叠时,总是会造成混乱。 哪一列被映射到哪个字段? 为了避免这种情况,您应该显式命名查询中涉及的secondy表中的所有列。 像这样:

select j.*, v.ip, v.id as vid , v.name as vname from jobs_jobs as
  j,clientadmin_virtualmachine as v where (j.ip_id)::int = v.id 
  order by j.date desc

现在,您将在每个作业实例中都有一个名为vidvname 您无需为virtualmachine表创建模型。

综上所述,上面的查询很容易使用ORM编写,因此您可能应该避免在此处进行原始查询

jobs管理器仅返回其映射表中的字段。 您还需要为clientadmin_virtualmachine表创建一个模型,并在ForeignKey使用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM