我有一个应用程序,用户可以将帖子设置为他们的最爱。模型定义如下:
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'的列,如果帖子不被当前用户收藏,则为null值;如果帖子被收藏,则为当前用户的id。
无论如何,使用django的ORM可以做得更简单,更优雅吗?
答案 0 :(得分:0)
Django提供的contenttypes framework可能对您的情况有用。并且它也使用通用外键以更优雅的方式完成相同的工作。
**查看https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/上的示例,它们与您要实现的内容非常相似