template select_related queryset example django django-queryset

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)