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>


Última modificación: 01 Aug 2023 01:28
No hay comentarios aún
Sé el primero en comentar este artículo