简体   繁体   English

Django从一个查询集中排除另一个查询集

[英]Django excluding one queryset from another

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 ie all DeliveryTime excluding the BlockedDeliveryTime . 我想返回一天所有可用的交货时间,即除了BlockedDeliveryTime之外的所有DeliveryTime

 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 delivery_times我想删除所有blocked_delivery_times.delivery_time

How can I do that? 我怎样才能做到这一点? Any suggestions? 有什么建议么?

blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
    .values('delivery‌​_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)

For newer version of Django (I use 1.10) you should not use .objects for the second line. 对于较新版本的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)

With the release of Django 1.11 you can use difference , which takes advantage of the EXCEPT SQL operator. 随着Django 1.11的发布,你可以使用difference ,它利用了EXCEPT SQL运算符。 I think it might be more efficient because you aren't evaluating a query to get a list of values. 我认为它可能更有效,因为您没有评估查询以获取值列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 根据新近性从Django queryset中排除对象 - Excluding objects from Django queryset based on recency 从Django查询集中的另一个模型获取查询集 - Get a queryset from another Model in a queryset in Django 如何从另一个查询集中的一个查询集中找到一个对象的大量匹配? - how to find much matches of one objects from one queryset in another queryset Django? Django REST Framework:使用组合过滤器从另一个查询集中排除一个查询集 - Django REST Framework: Exclude one queryset from another with combined filters 如何在 Django 中将查询集从一个视图传递到另一个视图 - How to pass queryset from one view to another in Django Django 在不使用字段查找的情况下从查询集中排除特定实例 - Django excluding specific instances from queryset without using field lookup Django - 从查询集中排除对象导致“表达式树太大” - Django - excluding objects from queryset results in “expression tree is too large” 排除Django queryset中的某些行 - Excluding some rows in Django queryset 将一个查询集的结果与另一查询集的结果进行比较 - Check the results of one queryset against the results of another queryset django Django从另一个查询集中排除查询集中的项目 - Django exclude Items from Queryset from another Queryset
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM