2012-07-27 13 views
5
内の1つのクエリ

可能性の重複にフィルタを組み合わせる:
Django Tastypie Advanced Filtering: How to do complex lookups with Q objectsTastypie

私はこのようになりますtastypie modelRseourceあります

class TaggedResource(ModelResource): 
    tags = ListField() 
    user = fields.ForeignKey(UserProfileResource, 'user') 

    class Meta: 
     queryset = Media.objects.all().order_by('-timestamp') 
     authorization = MediaAuthorization() 
     detail_allowed_methods = ['get', 'post', 'put', 'delete','patch'] 

    filtering = { 
     #'user': ALL_WITH_RELATIONS, 
     #exact is date, lt is less than lte less than equal to, etc 
     'timestamp': ['exact', 'range', 'lt', 'lte', 'gte', 'gt'], 
     'social_source': ALL, 
     'media_type': ALL, 
     'comment': ['exact', 'startswith', 'endswith', 'contains'], 
     'media_text': ['exact', 'startswith', 'endswith', 'contains'], 
    } 

を私が持っている必要がありますOR演算子を使用すると、クエリを1つのパラメータに組み合わせることができます。たとえば、 "test"という単語を含むオブジェクトをコメントフィールドまたはmedia_textフィールドから戻したいとします。

これが理想的であろう:HTTP:? 'Q' が両方のフィールドまたはフィルタを実行mysite.com/api/v1/tagged Q =試験

これは実行可能ですか?

UPDATE:ここで私は、高度なフィルターでの作業が、ORステートメントを取得する方法を実際に確認していない午前です:

def build_filters(self, filters=None): 
    if filters is None: 
     filters = {} 

    orm_filters = super(TaggedResource, self).build_filters(filters) 

    if 'q' in filters: 
     orm_filters['comment__contains'] = filters['q'] 
     orm_filters['media_text__contains'] = filters['q'] 
    return orm_filters 

答えて

4

あなたはbuild_filtersをオーバーライドすることで正しいことをやっている、あなたはDjangoのQクラスを使用および/またはクエリすることができ、私はここに同様の質問に答えている

Tastypie filtering with multiple values

、ここでもう一つの興味深いものです:

Tastypie Negation Filter

+0

これは私が必要としたものです。ありがとう! – bevinlorenzo

1

私はそれはなんとかですわからない「にもかかわらずAdvanced Filteringを見てお勧めします。 しかし、build_filtersをオーバーライドすると、リソース全体にアクセスすることができ、フィールド以上のフィルタを定義できる可能性があります。

+0

ええ、私は高度なフィルタリングを検討していましたが、実際にどのようにOR文を実行するのかわかりません。私が持っているのは、AND条件でフィルタリングすることです。 – bevinlorenzo

+0

元の質問に私の高度なフィルタを追加しました。 – bevinlorenzo

+0

私が言ったことは、実際にあなた自身のフィルタを定義しなければならないということです。そして、これはあなたがtastypieフィルタリングにそれを加えることができる場所です。 –