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:限制 models.ForeignKey 结果