[英]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.