【发布时间】:2016-04-20 01:21:53
【问题描述】:
我有这个模型
class Book(models.Model):
title = models.CharField(max_length=255, blank=False, null=False)
class Like(models.Model):
user = models.ForeignKey(User, related_name="like_user", blank=False, null=False)
book = models.ForeignKey(Book, related_name="like_book", blank=False, null=False)
class Meta:
unique_together = ["user", "book"]
我想获取所有书籍并检查当前用户是否喜欢单个请求中的每本书
Book.objects.select_related('like_book').all()
由于很多结果而无法工作
Book.objects.prefetch_related('like_book').all()
将缓存like_set,但它会包含对这本书的所有喜欢。不只是给这个用户一个。
最后我想要额外的字段is_liked
books = Book.objects.MAGIC_FETCH('like_book', user=self.request.user).all()
books[0].is_liked
【问题讨论】:
-
看看这个答案,它的作用与你想要的非常相似:stackoverflow.com/a/30650380/3955830
-
@solarissmoke 它非常接近我想要的。我想我可以用它来回答我的问题。但是,如果有任何方法可以在没有外部查询的情况下更优雅地做到这一点,这仍然很有趣。不过非常感谢
标签: python django django-models django-orm django-related-manager