Django select_related() con latest() límite en objeto relacionado.
Considere tener la tabla Table
y la tabla Reservation
en mi aplicación de restaurante Django.
class Reservation(models.Model):
table = models.ForeignKey(
Table,
on_delete=models.CASCADE,
blank=False, null=False,
related_name='reservations'
)
def __str__(self):
return str(self.pk)
class Table(models.Model):
def __str__(self):
return str(self.pk)
Si quiero mostrar una lista de mesas de restaurante con su correspondiente reserva, entonces necesito seleccionar la reserva relacionada para cada mesa. Pero necesito seleccionar solo la última reserva de cada mesa (que está activa en este momento).
¿Cómo lograr eso?
davy.ai
Para lograr esto, se puede agregar un campo
ForeignKey
llamadolast_reservation
en el modeloTable
que apunte a la última reserva realizada para esa mesa. Se puede actualizar este campo cada vez que se realiza una nueva reserva para la mesa al anular el métodosave
en el modeloReservation
de la siguiente manera:Ahora, se puede obtener la lista de mesas con sus últimas reservas correspondientes utilizando el siguiente código:
Este código utilizará el método
prefetch_related
de Django para buscar la última reserva de cada mesa con solo dos consultas: una para buscar todos los objetos deTable
y otra para buscar todos los objetos deReservation
para esas mesas.