2016-04-12 154 views
1

我在我的視圖頁面中運行Django查詢(v1.9)時遇到問題。我基本上檢索從primers表中的一個記錄(這是工作的罰款),然後試圖從「基因」的表中檢索相應的記錄:Django查看查詢和外鍵查詢

models.py:

class Gene(models.Model): 
    GeneName = models.CharField(max_length=10, unique=True) 
    ChromosomeNo = models.CharField(max_length=2) 

class Primer(models.Model): 
    PrimerName = models.CharField(max_length=20, unique=True) 
    Gene = models.ForeignKey(Gene) 

意見的.py

def PrimerDetail(request, pk): 
    primer_info = get_object_or_404(Primer, pk=pk) 
    Gene_info = Gene.objects.get(Gene_id = primer_info.GeneName) 

的問題似乎是與我的使用primer_info.GeneName。我得到:

'Primer' object has no attribute 'GeneName' 

將其更改爲primer_info.Gene和獲取:

無法解析關鍵字 'Gene_id' 到現場。選擇是:染色體區域,染色體否,評論,疾病,Disease_id,Gen​​eName,NoExons,id,引物`

我可以替代字符串值,它工作正常。在這種情況下,我應該如何引用一個外鍵對象的字段?

回答

0

嗯,這是因爲你的Primer模型中永遠不會有一個名爲Gene_id的字段。由於GenePrimer外鍵,很容易得到Gene_info

Gene_info = primer_info.Gene 

如果你想直接在Gene模型(這是非常不必要的,你的情況)進行查詢,這樣做:

Gene_info = Gene.objects.get(primer__id=primer_info.id) 
+0

謝謝!我忘了解釋它實際上是我之後的「染色體否」字段,因此查詢基因模型是必需的。但那已經奏效。我可能需要花幾分鐘思考爲什麼,但我非常感謝! – 16shells

+0

這是一樣的,你可以有'Gene_info = primer_info.Gene.ChromosomeNo'。 –

+0

明白了。再次感謝。 – 16shells

1

通過上面的描述,你可以嘗試一下獲取Gene對象的另外一種方法,這是跟在。

Gene_info = Gene.objects.get(pk = primer_info.Gene.id) 

這會給你引物表中外鍵的Gene對象的對象。