簡體   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