Django - 遵循向后的 ForeignKey,然后是 ForeignKey(查询)

Posted

技术标签:

【中文标题】Django - 遵循向后的 ForeignKey,然后是 ForeignKey(查询)【英文标题】:Django - Follow a backward ForeignKey and then a ForeignKey (query) 【发布时间】:2017-01-17 14:22:21 【问题描述】:

我使用 Django 1.9 和 Python 2.7。

我的应用有四个模型。每一次“旅行”都由访问者选择的几个“步骤”组成,这些“步骤”与“地点”相关,其中可能有几个相关的“图片”。

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)

我想使用现有的“selectedtrip”查询集检索与特定旅行相关的所有“图片”对象:

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

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

【问题讨论】:

【参考方案1】:

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

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

Picture.objects.filter(theplace__step__trip=selectedtrip)

【讨论】:

以上是关于Django - 遵循向后的 ForeignKey,然后是 ForeignKey(查询)的主要内容,如果未能解决你的问题,请参考以下文章

序列化后 Django db 字段不显示修改后的 slug 字段值

Django:如何向后跟随 ForeignKey('self')

Django 通过 ForeignKey 反向查找

Django:限制 models.ForeignKey 结果

Django:如何获取列表相关的 ForeignKey 记录?

django - 具有多个 ForeignKey 的 inlineformset_factory