2009-10-23 86 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')