Django - 跟随一个向后的ForeignKey然后一个ForeignKey(查询)

时间:2016-09-09 12:20:58

标签: python django django-models foreign-keys django-queryset

我使用Django 1.9和Python 2.7。

我的应用有四种型号。每次"旅行"是由几个"步骤"由访客选择,与#34;地点相关,可能有几个相关的"图片"。

class Trip(models.Model):
    title = models.CharField(max_length=140, blank=True)

class Step(models.Model):
    theplace = models.ForeignKey(ThePlace)
    trip = models.ForeignKey(Trip)

class ThePlace(models.Model):
    name = models.CharField(max_length=200)

class Picture(models.Model):
    file = models.ImageField(upload_to="pictures")
    slug = models.SlugField(max_length=100, blank=True)
    theplace = models.ForeignKey(ThePlace, null=True, blank=True)

我想检索所有"图片"与特定Trip相关的对象,使用现有的" selectedtrip"查询集:

selectedtrip = Trip.objects.filter(author=request.user)[0]
pictures = selectedtrip.step_set.all().theplace.picture_set.all()

Django显示以下错误: " AttributeError:' QuerySet'对象没有属性' theplace'" 知道为什么吗?

1 个答案:

答案 0 :(得分:2)

因为all()返回一个查询集,它是一个项集合; theplace是单个步骤的属性,而不是集合的属性。

执行此类查询的方法是从要检索的类开始,并使用双下划线语法跟踪查询中的关系。所以:

Picture.objects.filter(theplace__step__trip=selectedtrip)