首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在父对象中获取子属性

如何在父对象中获取子属性
EN

Stack Overflow用户
提问于 2011-07-28 23:52:18
回答 3查看 3.9K关注 0票数 4

我是Django的新手,似乎有一种简单明了的方法可以做到这一点,但如果是这样的话,我还没有找到它。

(稍微简化了代码)

我有个小学班级

代码语言:javascript
运行
复制
class Article(models.Model):
    ...

和第二个类

代码语言:javascript
运行
复制
class Headline(models.Model):
    article = models.ForeignKey(Article)
    headline = models.CharField(max_length=200)

有没有一种简单的方法来获取Article对象的headline属性(或者更确切地说,获取与Article对象相关联的所有Headline对象的headline属性)?我知道可以通过article属性过滤Headline对象,但我怀疑有一种更快、更简单的方法。例如,是否可以向类Article添加一个返回所有相关Headline对象的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-29 16:54:06

获取所有实际标题的更好方法是使用values_list

代码语言:javascript
运行
复制
article.headline_set.values_list('headline', flat=True)

这通过实际请求headline字段来减少对数据库的命中率。

票数 3
EN

Stack Overflow用户

发布于 2011-07-28 23:54:39

如果您只有一个Article实例,那么可以使用以下命令获取所有的headline对象

代码语言:javascript
运行
复制
article.headline_set.all()

这将返回一个QuerySet,您可以像使用其他任何use一样使用它。

编辑:如果您想要获取实际的标题值,那么就像任何其他查询集一样,您将需要获取Headline的单个实例。例如,

代码语言:javascript
运行
复制
headline = article.headline_set.all()[0].headline

Edit2:正如Thibault J在评论中指出的那样,你可以通过以下方式获得所有的头条新闻

代码语言:javascript
运行
复制
headlines = [headline.headline for headline in article.headlines.all()]
票数 5
EN

Stack Overflow用户

发布于 2011-07-29 00:12:49

可以指定related_name属性来设置用于访问文章标题的属性名称。

代码语言:javascript
运行
复制
class Article(models.Model):
    pass

class Headline(models.Model):
    article = models.ForeignKey(Article, related_name='headlines')

a = Article.objects.all()[0]
print a.headlines.all()

否则,默认属性名称将为headline_set,如murgatroid99所述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6861890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档