我有以下两种模式:
class DeliveryTime(models.Model):
delivery_time = models.CharField(max_length=15)
class BlockedDeliveryTime(models.Model):
delivery_date = models.DateField()
delivery_time = models.ForeignKey(DeliveryTime)
我想要返回一天的所有可用投放时间,即DeliveryTime
以外的所有BlockedDeliveryTime
。
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
delivery_times = DeliveryTime.objects.all()
从delivery_times
查询集我想删除所有blocked_delivery_times.delivery_time
我该怎么做?有什么建议?
答案 0 :(得分:38)
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)
答案 1 :(得分:6)
对于较新版本的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)
答案 2 :(得分:1)
随着Django 1.11的发布,您可以使用difference
,它利用了EXCEPT
SQL运算符。我认为它可能更有效,因为您没有评估查询以获取值列表。