[英]Correct way to query in many to many (django)
我正在嘗試獲取用戶收藏的書籍列表。 我可以從用戶那里拉出所有收藏夾的列表
myfavorites = Favorite.objects.filter(user=thisUser)"
這將返回 user1 的 3 個收藏夾的正確列表,但是當我嘗試使用該列表來獲取書籍列表時
"myBooks" : Book.objects.filter(favorites=myfavorites),
相反,我只得到一個對象(用戶添加到收藏夾的第一本書)。 查詢這個的正確方法是什么?
問題出在我的視圖還是模型中?
視圖.py
def books(request):
if 'userid' not in request.session:
return redirect('/')
else:
num = request.session['userid']
thisUser = User.objects.get(id=num)
myfavorites = Favorite.objects.filter(user=thisUser)
context = {
"user" : thisUser,
"otherBooks" : Book.objects.exclude(favorites=myfavorites),
"myBooks" : Book.objects.filter(favorites=myfavorites)
}
return render (request, 'app1/books.html', context)
模型.py
class User(models.Model):
first = models.CharField(max_length=30)
last = models.CharField(max_length=30)
email = models.CharField(max_length=40)
password = models.CharField(max_length=40)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
class Book(models.Model):
title = models.CharField(max_length=45)
author = models.CharField(max_length=30)
desc = models.TextField()
user = models.ForeignKey(User, related_name="books")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = BookManager()
class Favorite(models.Model):
favorite = models.BooleanField()
user = models.ForeignKey(User, related_name="favorites")
book = models.ForeignKey(Book, related_name="favorites")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
1 - 您可以進行反向查找:
my_books = Book.objects.filter(favorites__user=thisUser)
2 - 您可以先獲取最喜歡的圖書 ID,然后在Book
過濾器中使用它們:
fav_book_ids = Favorite.objects.filter(user=thisUser).values_list("book_id", flat=True)
books = Book.objects.filter(id__in=list(fav_book_ids))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.