Django excluding one queryset from another

reevh picture reevh · Mar 8, 2014 · Viewed 25.4k times · Source

I have the following two models:

class DeliveryTime(models.Model):
   delivery_time = models.CharField(max_length=15)

class BlockedDeliveryTime(models.Model):
   delivery_date = models.DateField()
   delivery_time = models.ForeignKey(DeliveryTime) 

I want to return all the available delivery times for a day i.e. all DeliveryTime excluding the BlockedDeliveryTime.

 blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
 delivery_times = DeliveryTime.objects.all()

From delivery_times queryset I want to remove all blocked_delivery_times.delivery_time

How can I do that? Any suggestions?

Answer

Paul Draper picture Paul Draper · Mar 8, 2014
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
    .values('delivery‌​_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)