我对Django很新,似乎有一种简单而明显的方法可以做到这一点,但如果是这样的话我就找不到了。
(略微简化的代码)
我有一个小学班
class Article(models.Model):
...
和二级课程
class Headline(models.Model):
article = models.ForeignKey(Article)
headline = models.CharField(max_length=200)
是否有一种简单的方法可以获取headline
对象的Article
属性(或者更确切地说,获取与该对象关联的所有headline
个对象的Headline
属性Article
对象)?我知道可以通过Headline
属性过滤article
个对象,但我怀疑有更快更简单的方法。是否可以向类Article
添加一个方法,例如,它将返回所有关联的Headline
个对象?
答案 0 :(得分:5)
如果您有Article
的单个实例,则可以使用
article.headline_set.all()
这将返回一个可以像其他任何一样使用的QuerySet。
编辑:如果您想获得实际的标题值,那么就像任何其他查询集一样,您需要获得Headline
的单个实例。例如,
headline = article.headline_set.all()[0].headline
Edit2:正如Thibault J在评论中指出的那样,你可以获得所有头条新闻
headlines = [headline.headline for headline in article.headlines.all()]
答案 1 :(得分:3)
获取所有实际标题的更好方法是使用values_list
:
article.headline_set.values_list('headline', flat=True)
这样只会实际请求headline
字段,从而减少对数据库的命中。
答案 2 :(得分:1)
您可以指定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所述。