2017-09-18 8 views
0

[EDITED]mongoengineに応答して、コレクションを使用することができない

Iフラスコ+コネクションを使用して、APIを有する(闊歩2.0)

いつでも私のような単純なコードを使用して、データベースからコレクションを取得:

私は次のエラーを取得
# GET /api/model 
def get_all_model(): 
    return Model.objects 

:回避策として

TypeError: [Model] is not JSON serializable

を、私が行っています

私は/デシリアライズをシリアライズすることなく、全体のコレクションを返すことができますどのように
def get_all_model(): 
    return json.loads(model.objects.to_json()) 

次?ドキュメントから

Document classes have an objects attribute, which is used for accessing the objects in the database associated with the class. The objects attribute is actually a QuerySetManager, which creates and returns a new QuerySet object on access. The QuerySet object may be iterated over to fetch documents from the database:

答えて

1

質問は今や明らかです。クエリーセットではなくリストを返してJSONに直接シリアル化する方法はないと思います。ただし、クエリーセットオブジェクトを使用してすべてのドキュメントを繰り返し処理し、辞書のリストに入れることで、自分で行う必要があります。

import mongoengine 

mongoengine.connect('mongoenginetest', host='mongomock://localhost') 

class Student(mongoengine.Document): 
    name = mongoengine.StringField() 

    @mongoengine.queryset_manager 
    def serialized_objects(doc_cls, queryset): 
     return [{'name': doc.name} for doc in queryset] 

student1 = Student(name='John') 
student1.save() 

print(type(Student.serialized_objects)) # prints <class 'list'> 
print(Student.serialized_objects) # prints [{'name': 'John'}] 

serialized_objectsの名前をオブジェクトに変更することができます。また、このページをご覧ください:https://gist.github.com/benwah/3009143

幸せな一日!

+0

私は質問をより明確に編集しました。私はシリアル化する必要がないようにしようとしているし、それは不要な作業が行われているので、逆シリアル化しています。 Python辞書として項目を取得する方法があるはずですか?私は 'as_pymongo()'がこれを行うと思ったが、そうではないようだ – Felipe

関連する問題