簡體   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