我一直在尝试生成未经用户审核的图书清单,即他/她尚未为其撰写评论的图书。以下是 models.py :
中的重要细节class book(models.Model):
name = models.CharField(max_length=100)
isbn = models.CharField(max_length=15)
author = models.CharField(max_length=120)
year = models.CharField(max_length=15)
genre_name = models.IntegerField()
rating = models.IntegerField()
description = models.CharField(max_length=2000)
img = models.ImageField()
def __str__(self):
return self.name
class reviews(models.Model):
name = models.CharField(max_length=150)
bookid = models.IntegerField()
review = models.CharField(max_length=750)
rating = models.IntegerField(default=0)
def __str__(self):
return self.name
所以,我一直在尝试首先获得用户已经审阅过的书籍:
books1 = reviews.objects.filter(name=username)
为了获得这些书的数据库,我正在做以下事情:
allb = book.objects.all()
最初,我只是在range(1,132)
中随机生成了5个数字并将它们存储在数组randb
中,如下所示:
randb = []
for i in range(0,5):
randb.append(randint(1,132))
然后将这些生成的数字链接到我在HTML部分的allb
中检索到的图书数据库。
我主要担心的是,当我这样做时,我最终会得到用户已经审阅的书籍,因为我没有给出任何条件。
注意:我只想检索那些未经用户审核的图书ID。
此外,我尝试执行以下操作以将其过滤掉:
books1 = reviews.objects.filter(name=username)
allb = book.objects.all()
randb = []
reviewed_books = books1.bookid /*I get error in this line: 'QuerySet' object has no attribute 'bookid'*/
count = 0
for i in range(0,132):
if i not in reviewed_books
randb.append(randint(1,132))
count = count + 1
if count == 5
break
我不知道如何使该行(上述代码中的注释行)有效。需要建议和一些代码片段才能使我的代码正常工作。
提前谢谢你:)
编辑:(我忘了冒号':'在if语句之后)
books1 = reviews.objects.filter(name=username)
allb = book.objects.all()
randb = []
reviewed_books = books1.bookid /*I get error in this line: 'QuerySet' object has no attribute 'bookid'*/
count = 0
for i in range(0,132):
if i not in reviewed_books:
randb.append(randint(1,132))
count = count + 1
if count == 5:
break
答案 0 :(得分:0)
您可以尝试查找所有图书,然后从该结果中排除已经过用户审核的图书:
book.objects.exclude(id__in=reviews.objects.filter(name=username).values_list('id', flat=True)