我有一个应用程序,用户可以在其中将帖子设置为他们的最爱。模型定义如下:
class UserProfile(models.Model):
user = models.OneToOneField(User)
favorites = models.ManyToManyField('Post', through='Favorite', related_name='favorited_by')
class Post(models.Model):
created_by = models.ForeignKey(UserProfile)
body = models.TextField()
class Favorite(models.Model):
created_by = models.ForeignKey(UserProfile)
post = models.ForeignKey(Post)
现在我正在寻找一种简单的方法来查询帖子,同时检查帖子是否被当前用户收藏。目前我正在使用以下,远非优雅的解决方案:
query = """
SELECT p.id, p.body, p.created_by_id, f.created_by_id AS favorited
FROM main_post p LEFT OUTER JOIN main_favorite f
ON
p.id = f.post_id AND
f.created_by_id = %s
""";
posts = Post.objects.raw(query, [request.user.userprofile.id])
如果帖子未被当前用户收藏,则这将产生一个名为“favorited”的列,如果该帖子未被收藏,则该列具有空值;如果该帖子被收藏,则该列具有当前用户的 id。
无论如何,这可以使用 django 的 ORM 更简单、更优雅地完成吗?