检索查询集的相关数据

时间:2019-05-19 19:03:48

标签: django django-models django-rest-framework django-queryset django-filter

我有以下模型类:

class User(models.Model):
    ...
class Book(models.Model):
    ...
class WishListRelationship(models.Model):
    user = models.ForeignKey(User, db_index=True, blank=False, null=False, related_name='wishlist', on_delete=CASCADE)
book = models.ForeignKey(Book, blank=False, null=False, on_delete=CASCADE)
created_at = models.DateTimeField(auto_now_add=True)

然后,我希望通过一次数据库调用从用户那里获得书籍的查询集。如果这样做:

request.user.wishlist.select_related('book').all()

然后我有WishListRelationship的查询集,但是我只想买书,所以我尝试执行以下操作:

Book.objects.annotate(wished_books_ids=request.user.wishlist.all().values_list('book_id', flat=True)).filter(id__in=F('wished_books_ids'))

但是我没有实现我想要的,这是在INNER JOIN中获取相关书籍的列表。我该怎么办?

预先感谢

1 个答案:

答案 0 :(得分:2)

您不需要使其变得复杂,可以使用以下命令进行查询:

Book.objects.filter(wish_list_relationship__user=request.user)