Libro models.py

from pickletools import optimize
from django.db import models
from django.db.models.signals import post_save

#apps de tercero

from PIL import Image

from applications.autor.models import Autor

from .managers import LibroManager,CategoriaManager
# Create your models here.


class Categoria(models.Model):
    nombre = models.CharField(max_length=30)

    objects=CategoriaManager()

    def __str__(self):
        return str(self.id) + ' - '+ self.nombre


class Libro(models.Model):
    categoria = models.ForeignKey(
        Categoria,
        on_delete=models.CASCADE,
    )
    autores = models.ManyToManyField(Autor)
    titulo = models.CharField(
        max_length=50
    )
    fecha = models.DateField('Fecha de Lanzamiento')
    portada = models.ImageField(upload_to='portada')
    visitas = models.PositiveIntegerField()
    stok=models.PositiveIntegerField(default=0)

    objects = LibroManager()

    class Meta:
        verbose_name='Libro'
        verbose_name_plural='Libros'
        ordering=['titulo','fecha']


    def __str__(self):
        return str(self.id) + '-'+ self.titulo

    def listar_libros_categoria(self,categoria):

        return self.filter(
            categoria__id=categoria
        ).order_by('titulo')

 

La siguiente consulta es entre los modelos libro y categoria solamente

managers.py

class LibroManager(models.Manager):

    def listar_libros_categoria(self, categoria):
        return self.filter(
            categoria__id=categoria    #categoria__nombre=categoria   #filtrar por nombre
        ).order_by('titulo')

views.py

class ListLibros2(ListView):
    context_object_name = 'lista_libros'
    template_name = 'libro/lista2.html'

    def get_queryset(self):
        return Libro.objects.listar_libros_categoria('1')

urls.py

urlpatterns = [
    path(
        'libros-2/',
        views.ListLibros2.as_view(),
        name="libros2"
    ),
]

templates/libro/lista2.html

<h1>lista de Libros</h1>

<ul>
    
    {% for l in lista_libros %}
        <li>{{l.titulo}} - {{l.fecha}}</li>
    {% endfor %}
        
</ul>