2016-12-29 10 views
0

JSONBオブジェクト内に含まれるデータに対してフラスコレスレスAPIクエリを実行しようとしています。基本的なクエリではデータフィールドをキャストする方法がわからないため、クエリを正しく生成する方法がわからないため、確信が持てないので推測します。JSONBコンテンツにFlask-restless APIクエリを実行する方法

私はAjaxの検索を実行したときに実行されるクエリ:

http://192.168.163.129:1080/api/subscribers?page=1&results_per_page=10&q={"filters":[{"name":"data","op":"has","val":{"name":"full_name","op":"eq","val":"%Steve%"}}],"order_by":[{"field":"created","direction":"asc"}]} 

これは私がクエリを実行すると、私が得るトレースバックです。

2016-12-29 22:26:33,068 - app - ERROR - mapper 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/views.py", line 1172, in _search 
    result = search(self.session, self.model, search_params) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 587, in search 
    query = create_query(session, model, search_params, _ignore_order_by) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 549, in create_query 
    _ignore_order_by) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 480, in create_query 
    filters = [create_filt(model, filt) for filt in search_params.filters] 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 438, in _create_filter 
    return create_op(model, fname, filt.operator, val, relation) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 411, in _create_operation 
    return opfunc(field, argument, fieldname) 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 106, in <lambda> 
    'has': lambda f, a, fn: f.has(_sub_operator(f, a, fn)), 
    File "/usr/local/lib/python2.7/dist-packages/flask_restless/search.py", line 37, in _sub_operator 
    submodel = model.property.mapper.class_ 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 833, in __getattr__ 
    return self._fallback_getattr(key) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 811, in _fallback_getattr 
    raise AttributeError(key) 
AttributeError: mapper 

APIコード:

manager.create_api(Subscribers, methods=['GET'], results_per_page=10, 
        preprocessors=dict(GET_SINGLE=[subscribers_preprocessor], 
             GET_MANY=[subscribers_preprocessor])) 

プリプロセッサは、単純な認証処理です。

JSONBのpostgresフィールドでフィルタリングするためのフィルタを適切にフォーマットするにはどうすればよいですか?

+0

「Subscribers」クラスの定義を投稿できますか? – ACV

+0

私はそれが本当に重要だとは思わない。しかし、識別子としてdb.Stringではなくdb.JSONBを持つ一般的なテーブルです。 – Artagel

答えて

1

この時点での答えは、フラスコレスレスレスではできません。

フラスコレスレスに変更を加えて、特別にフォーマットされたクエリ文字列を分割し、jsonbに対して正しくクエリをキャストしました。痛みの種類、おそらくスケーラビリティはありません。

フラスコレス不安定なgitでは強調表示されています。

https://github.com/jfinkels/flask-restless/issues/623

関連する問題