2017-12-14 6 views
0

Anaylticsというモデルがあります。
このモデルのURLフィールドには、さまざまな値が含まれています(例: '/ login'、 '/ sports/1234'、 '/ search')。Django ORM、フィルタリングを取得しても条件に合致しないデータ

class Analytics(models.Model) 
    url = models.CharField(max_length=255, null=True) 
    value = models.IntegerField(null=True) 

下記のcategory_listに文字列を含むURLを含むレコードのみを取得しようとしました。

category_list = ['fashion', 'food', 'sports'] 

filter_q = reduce(operator.or_, (Q(url__contains=c) for c in category_list)) 

query = Analytics.objects.filter(filter_q) 

しかし、URL等の不測のURLを、 '/ログイン' を持つレコードは、も取得されます。
どこに間違っているか教えてください。

+0

@Alasdairああ、申し訳ありません。一定。 – xKxAxKx

+0

あなたの 'Q()'オブジェクトを還元する方法はOKです。あなたが投稿したコードに何か間違ったことはありません。私は '/ login'というURLをなぜ返すのか説明できません。 – Alasdair

答えて

1

このクエリを使用します。

import operator 
import functools 
from django.db.models import Q 

category_list = ['fashion', 'food', 'sports'] 
query_filter = functools.reduce(operator.or_, (Q(url__icontains = category) for category in category_list)) 
result = Analytics.objects.filter(query_filter) 
+0

これはまさにOPが投稿したものです。 – solarissmoke

+0

その同じではありません。 **もう一度それを見てください**。彼はurl__icontains(二重アンダースコア付き)の代わりにurl_containsを使用しています。 –

+0

申し訳ありません。私は 'url_contains'を書きましたが間違いでした。正しくは 'url__contains'です。一定。 – xKxAxKx

関連する問題