簡體   English   中英

Django從一個查詢集中排除另一個查詢集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM