2009-10-23 167 views
0

我在django中寫入queryset。在第一個查詢集中,它工作正常。在第二個它是給錯誤 「無法解析XYZ到現場.. ..」django查詢集

在models.py

class XYZ(models.Model): 

    id= models.AutoField(primary_key=True) 

    name = models.CharField(max_length=200) 

    addres= models.CharField(max_length=200) 

    def __unicode__(): 
    return self.name 

class ASD(models.Model): 
    id= models.AutoField(primary_key=True) 
    pub = models.ForeignKey(XYZ) 
    city= models,CHarField(max_length=200) 

首先查詢集:

queryset= XYZ.objects.filter(asd__pub____exact='4535344sds3646fhgf7987') 

第二查詢集:

queryset= ASD.objects.filter(xyz__id____exact='4535344sds3646fhgf7987') 

但根據django docs它應該工作。

+0

請發表您的模型和錯誤的代碼的真實例子。 – 2009-10-23 12:08:10

回答

0

錯誤提示您QuerySet中的ASD對象沒有xyz字段。是否有可能是你的拼寫錯誤或Field的名字不只是它引用的Model的名字的小寫版本?

0

在您引用的文檔,在入門車型仔細一看:

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 

,以及它如何引用博客型號:

>>> Entry.objects.filter(blog__name__exact='Beatles Blog') 

blog被定義爲一個字段是一個ForeignKey到一個博客模型。它沒有變得花哨,並將外國模式名稱(本例中的「博客」)解析爲字段值(「博客」);它只是使用你給它的名字。因此,你應該改變你的ASD模型定義:

class ASD(models.Model): 
    xyz = models.ForeignKey(XYZ) 

你有pub現在,但你正在嘗試使用xyz,這是不確定的進行檢索。另外,你在一個地方有太多的下劃線;應改爲:

queryset= ASD.objects.filter(xyz__id__exact='4535344sds3646fhgf7987') 

當然,你可以在一個查詢更改爲:

queryset= ASD.objects.filter(pub__id__exact='4535344sds3646fhgf7987')