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

时间:2017-05-24 04:40:38

标签: python django database django-models pgadmin

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 字段值。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

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轻松编写的,所以你可能应该避免使用原始查询

答案 1 :(得分:0)

For ($i = 0; $i -lt $Data.Length; $i++) { $Line = $Data[$i] Foreach ($Word in $Line.Split(' ,')) { Write-Host ('Line {0} contains the word: "{1}" {2} time(s)' -f ($i + 1), $Word, (($Line -split $Word).Count-1)) } } 管理器仅返回其映射表中的字段。您还需要为jobs表创建一个模型,并在clientadmin_virtualmachine

中使用它