conectar el modelo libro con el manager

models.py


from django.db import models

#apps de tercero

from PIL import Image

from applications.autor.models import Autor

from .managers import LibroManager,CategoriaManager

class Libro(models.Model):
    categoria = models.ForeignKey(
        Categoria,
        on_delete=models.CASCADE,
        related_name='categoria_libro'
    )
    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()    #conexion con el manager

    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')


managers.py

import datetime    #para usar el datetime y convertir el formato de fecha
class LibroManager(models.Manager):

    def listar_libros2(self, kword,fecha1,fecha2):
        #convertir la fecha en el formato que dajngo reconoce
        date1 = datetime.datetime.strptime(fecha1, "%Y-%m-%d").date()
        date2 = datetime.datetime.strptime(fecha2, "%Y-%m-%d").date()

        resultado = self.filter(
            titulo__icontains=kword,
            fecha__range=(fecha1,fecha2)
        )
        return resultado

views.py

from .models import Libro

class ListLibros(ListView):
    context_object_name = 'lista_libros'
    template_name = "libro/lista.html"

    def get_queryset(self):
        palabra_clave = self.request.GET.get("kword",'')

        #fecha1
        f1 = self.request.GET.get("fecha1",'')
        #fecha2
        f2 = self.request.GET.get("fecha2",'')

        if f1 and f2:
            return Libro.objects.listar_libros2(palabra_clave,f1,f2)
        else:
            return Libro.objects.listar_libros(palabra_clave)  

urls.py

from django.contrib import admin
from django.urls import path

from .import views

urlpatterns = [
    path(
        'libros/',
        views.ListLibros.as_view(),
        name="libros"
    ),
]

templates/libro/lista.html

<h1>lista de Libros</h1>

<p>
    <form method="GET">{% csrf_token %}
        <input type="text" id="kword" name="kword" placeholder="ingrese nombre">

        <input type="date" name="fecha1" id="fecha1">
        <input type="date" name="fecha2" id="fecha2">
        <button type="submit">CONSULTAR</button>

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