django查询集

时间:2009-10-23 11:38:01

标签: django

我在django中编写queryset。在第一个查询集中它工作正常。在第二个它给出错误“无法将xyz解析为字段.. ..”

在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它应该有效。

2 个答案:

答案 0 :(得分:0)

错误告诉您ASD中的QuerySet个对象没有xyz字段。是否有可能是您输入错误或Field名称不仅仅是它引用的Model名称的小写版本?

答案 1 :(得分: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')