[英]Django excluding one queryset from another
我有以下两种型号:
class DeliveryTime(models.Model):
delivery_time = models.CharField(max_length=15)
class BlockedDeliveryTime(models.Model):
delivery_date = models.DateField()
delivery_time = models.ForeignKey(DeliveryTime)
我想返回一天所有可用的交货时间,即除了BlockedDeliveryTime
之外的所有DeliveryTime
。
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
delivery_times = DeliveryTime.objects.all()
从delivery_times
我想删除所有blocked_delivery_times.delivery_time
我怎样才能做到这一点? 有什么建议么?
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)
对于较新版本的Django(我使用1.10),你不应该使用.objects作为第二行。
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.exclude(id__in=blocked_delivery_times)
随着Django 1.11的发布,你可以使用difference
,它利用了EXCEPT
SQL运算符。 我认为它可能更有效,因为您没有评估查询以获取值列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.