Django查看查询和外键查找

时间:2016-04-12 13:10:25

标签: python mysql django

我在浏览页面中运行Django查询(v1.9)时遇到问题。我基本上从primers表中检索了一条记录(工作正常),然后尝试从“{1}”基因中检索相应的记录。表:

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)

views.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'进入田野。选择是:ChromosomeLoc,ChromosomeNo,Comments,Disease,Disease_id,Gen​​eName,NoExons,id,primer`

我可以替换字符串值,它可以正常工作。如何在此上下文中引用作为外键对象的字段?

2 个答案:

答案 0 :(得分:1)

通过上面的描述,您可以尝试另外一种获取Gene对象的方法,如下所示。

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

这将为您提供Gene对象的对象,该对象是Primer Table中的外键。

答案 1 :(得分:0)

好吧,因为你的Gene_id模型中没有一个名为Primer的字段。由于GenePrimer中的外键,因此很容易获得Gene_info

Gene_info = primer_info.Gene

如果您想直接在Gene模型上查询(在您的情况下这是非常不必要的),请执行以下操作:

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