繁体   English   中英

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

[英]How to get a child attributes in parent object

我是Django的新手,似乎有一种简单而明显的方法可以做到这一点,但如果是这样,我就无法找到它。

(稍微简化的代码)

我有一个小学班

class Article(models.Model):
    ...

和一个中学课

class Headline(models.Model):
    article = models.ForeignKey(Article)
    headline = models.CharField(max_length=200)

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

如果您有一个Article实例,那么您可以获取所有标题对象

article.headline_set.all()

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

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

headline = article.headline_set.all()[0].headline

编辑2:正如Thibault J在评论中指出的那样,你可以获得所有头条新闻

headlines = [headline.headline for headline in article.headlines.all()]

获得所有实际头条新闻的更好方法是使用values_list

article.headline_set.values_list('headline', flat=True)

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

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

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所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM