我正在制作一个博客网站,我在查询性能方面遇到了一些问题.
我有三个模型
- 用户模型->;用户(存储用户邮箱、密码等)
- 后模型->; Actual Posts
- 人物模型->;(用于存储用户的额外信息)
后模型->;
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
category = models.ForeignKey(Category, on_delete=models.PROTECT)
title = models.CharField(max_length=255,null=True)
description = models.CharField(max_length=1000,null=True)
Likes = models.ManyToManyField(to=User, related_name='Post_likes')
favourites = models.ManyToManyField(to=User,blank=True,related_name="favourite")
人物模型->;
class People(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
photo = models.ImageField(upload_to='profile_pics', blank=True,null=True)
Phone_number = models.CharField(max_length=255,null=True,blank=True)
Birth_Date = models.DateField(null=True,blank=True)
Created_date = models.DateTimeField(auto_now_add=True)
Updated_date = models.DateTimeField(auto_now=True)
现在,由于这两个模型都连接到用户模型.我想查询帖子模型,并在模板中获取用户照片.现在,当我使用post.user.people.photo
时,它会为每一篇帖子生成一个单独的对DB的查询,导致速度变慢.我想在这里使用Join组合多个表,并一次获取所有记录.
我目前正在使用以下查询->;
posts = Post.objects.select_related().prefetch_related('images_set').annotate(comments_Count = Count('comments_post',distinct=True)).annotate(Count('Likes',distinct=True)).all().order_by('-id')