繁体   English   中英

如何过滤不等于Django中的queryset?

[英]How to filter queryset not equal to in Django?

我有一个称为Stores和SaleItems的模型,看起来像这样。

class Stores(models.Model):
    name = models.CharField(unique=True, max_length=20)


class SaleItems(models.Model):
    sale_by = models.ForeignKey(Stores)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

因此,我需要根据以下条件检索销售商品。

  1. 如果不是我的商店,则忽略start_date大于今天且end_date小于今天的项目。
  2. 如果它是我的商店,那么无论起始日期和结束日期如何,都可以获得商品。

因此,在我的views.py中,这是我提出的目标。

class SaleItemsView(viewsets.ModelViewSet):
    querys = SaleItems.objects.all()


def get_queryset(self):
    #get my store id
    store_id = self.request.query_params.get('store_id')
    querys = SaleItems.objects\
            .exclude(store__ne=store_id, end_date__lt=timezone.now())\
            .exclude(store__ne=store_id, start_date__gt=timezone.now())
    return querys

但是,django似乎不再没有等于运算符。 我还有其他方法可以实现这一目标吗?

我认为您可以使用Q对象合并每个条件的记录,然后执行distinct()来删除重复项:

now = timezone.now()
items_within_date_range = Q(start_date__lte=today, end_date__gte=today)
curr_store_items = Q(store=store_id)

result = SaleItems.objects.filter(items_within_date_range|curr_store_items).distinct()

第一个查询将获取您的商店和其他商店在时间范围内的所有商品,第二个查询将获取您的商店的所有商品,然后合并然后获取所有商品。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM