在下面的查询中,tweet的引用在prefetch中有一个“_set”,但在annotate中没有。在这两种情况下,从user到tweet的关系也是多对一的。
class User(models.Model)
name = models.CharField(max_length=50)
class Tweet(models.Model)
user = models.ForeignKey("User")
favorite = models.IntegerField(default=0)
User.objects.prefetch_related(
Prefetch(
"tweet_set",
query_set=Tweet.objects.order_by('favorite')
).annotate(most_favorites=Max("tweet__favorite")) # Why not "tweet_set__favorite"?
1条答案
按热度按时间m2xkgtsf1#
假设你有两个模型,Post和User。
在这个一个(用户)对多个(帖子)的关系场景中,如果您想获取帖子的作者,只需通过
post.author
。相反,如果你想获取用户写的帖子,那么你应该在模型名称后添加
_set
作为入口点:my_articles = user.post_set.all()
顺便说一句,你也可以用
related_name
参数在ForeignKey
构造函数中精确定义入口点字段名称,这取决于你的编码风格偏好:参考:django文档