queryset - select_related django example
Django excluyendo un queryset de otro (3)
Tengo los siguientes dos modelos:
class DeliveryTime(models.Model):
delivery_time = models.CharField(max_length=15)
class BlockedDeliveryTime(models.Model):
delivery_date = models.DateField()
delivery_time = models.ForeignKey(DeliveryTime)
Quiero devolver todos los tiempos de entrega disponibles para un día, es decir, todos los BlockedDeliveryTime
DeliveryTime
excepto el BlockedDeliveryTime
DeliveryTime
BlockedDeliveryTime
.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
delivery_times = DeliveryTime.objects.all()
Desde delivery_times
queryset quiero eliminar todos los blocked_delivery_times.delivery_time
¿Cómo puedo hacer eso? ¿Alguna sugerencia?
Con el lanzamiento de Django 1.11 puede usar la difference
, lo que aprovecha el operador EXCEPT
SQL. Creo que podría ser más eficiente porque no está evaluando una consulta para obtener una lista de valores.
Para la versión más reciente de Django (uso 1.10) no debes usar .objects para la segunda línea.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) /
.values(''delivery_time'')
delivery_times = DeliveryTime.exclude(id__in=blocked_delivery_times)
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) /
.values(''delivery_time'')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)