2017-08-03 3 views
0

いくつかのオブジェクトをチェックリストから除外したいと思います。最初は、各アイテムが '期限切れになっているかどうかをチェックする単純なforループです。しかし、これを行うと、すべてのオブジェクトが返されます。Djangoのクエリリストからオブジェクトを削除する

now = datetime.datetime.now() 
food = Food.objects.filter(user=self.user, in_cupboard=True) 

      for f in food: 
       if (f.cupboard.close_date + timedelta(days=1)) < now: 
        f.exclude(pk=f.id) 

forリストを使用してオブジェクトをフィルタリングする正しい方法は何ですか?

答えて

3

あなたの例では、問題は、また、あなたがその新しいクエリセットを保存する必要がある、あなたがfoodから除外すべきであるfから項目を除外することであるように:

valid_food = food 
for f in food: 
    if (f.cupboard.close_date + timedelta(days=1)) < now: 
     valid_food = valid_food.exclude(pk=f.id) 

しかし、フィルタリングを行うことができます唯一のDjangoのORMと、次のように:

today = datetime.date.today() 
food = Food.objects.filter(
    user=self.user, 
    in_cupboard=True, 
    close_date__gt=today, 
) 
2

なぜあなたは、Djangoのクエリの除外を使用していない

now = datetime.datetime.now() 
food = Food.objects.filter(user=self.user, in_cupboard=True).exclude(expires_at__lt = now) 
+0

残念ながら、私はこれを行うことができないと考えています – NickP

0

djangoでfilterまたはexclude関数を使用しないでリストを作成することを考慮して、単純にリストフィルタをPythonで使用できます。

now = datetime.datetime.now() 
food = Food.objects.filter(user=self.user, in_cupboard=True) 
new_list = list(filter(lambda x: (x.cupboard.close_date + timedelta(days=1)) < now, food)) 
関連する問題