2017-09-18 2 views
0

[EDITED]mongoengine이 응답 수집을 사용할 수

I 플라스크 + 접속을 이용하여 임의의 API가 (자신감 2.0)

마다 I 같은 간단한 코드를 사용하여, 데이터베이스에서 컬렉션을 검색 :

해결 방법으로

TypeError: [Model] is not JSON serializable

, 내가 행한 :

# GET /api/model 
def get_all_model(): 
    return Model.objects 

는 나는 다음과 같은 오류가 발생합니다

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에 직접 직렬화하는 방법은 없다고 생각합니다. 하지만 모든 문서를 반복 (queryset 개체 사용)하고 사전 목록에 넣는 방식으로 직접 처리해야합니다. 다음과 같이하는 것이 좋습니다.

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

더 명확하게 질문을 편집했습니다. 내가 불필요한 일을하고 있기 때문에 serialize하고 deserialize하는 것을 피하려고합니다. 항목을 파이썬 사전으로 가져 오는 방법이 있어야합니까? 나는'as_pymongo()'가 이것을 할 것이라고 생각했지만, 그렇지는 않았다. – Felipe