如何过滤不等于Django的查询集?

时间:2015-11-17 14:57:04

标签: python django django-rest-framework

我有一些名为Stores和SaleItems的模型看起来像这样。

'components' => [
    'user' => [
        'identityClass' => 'app\models\User',   
        'enableAutoLogin' => true,
        'enableSession' => true,
        'loginUrl' => ['study/login'],
    ],

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

  1. 如果它不是我的商店,那么请省略start_date大于今天且end_date比今天小的项目。
  2. 如果是我的商店,则获取与start_date和end_date无关的商品。
  3. 所以在我的views.py中,这是我走了多远。

    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()
    

    但似乎django不再具有相同的运算符。还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

我认为您会使用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()

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