He estado tratando de generar una lista de libros que no han sido revisados por un usuario, es decir, los libros para los que no ha escrito una reseña. Aquí están los detalles esenciales de mi 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.nameEntonces, he estado tratando de obtener primero los libros que el usuario ha revisado, algo como esto:
books1 = reviews.objects.filter(name=username)Y para obtener la base de datos de los libros, estoy haciendo lo siguiente:
allb = book.objects.all() Inicialmente, solo generé aleatoriamente 5 números en el range(1,132) y los almacené en una matriz randb , algo como esto:
randb = [] for i in range(0,5): randb.append(randint(1,132)) Y luego vincular esos números generados a la base de datos del libro que recuperé en allb en la parte HTML.
Mi principal preocupación es que cuando hago eso, termino obteniendo los libros que ya fueron revisados por el usuario, simplemente porque no he dado ninguna condición para eso.
Nota: Quiero recuperar solo las identificaciones de libros que no han sido revisadas por el usuario.
Además, intenté hacer lo siguiente para filtrarlo:
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 breakNo sé cómo hacer que funcione esa línea (la línea comentada en el código anterior). Necesito sugerencias y algún fragmento de código para que mi código funcione.
Gracias de antemano :)
EDITAR: (Olvidé los dos puntos ':' después de las declaraciones 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: breakPuede intentar encontrar todos los libros y luego, a partir de ese resultado, excluir los libros que ya ha revisado el usuario:
book.objects.exclude(id__in=reviews.objects.filter(name=username).values_list('id', flat=True)