我在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它应该有效。
答案 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')