1

Im은 ValuesQuerySet 객체를 json 데이터로 직렬화 할 수 없습니다.이 간격에 대한 여러 솔루션을 찾았지만 외부 키 값을 따라야하기 때문에이 경우가 다릅니다.django에서 ValuesQuerySet 객체를 json으로 직렬화하는 동안 발생하는 문제

from task_manager.models import UserTasks 
data=UserTasks.objects.filter(user__username="root",server_id=2).values("server_id__mnemonic") 

이전 쿼리는 다음과 같이 반환

>>> print data 
[{'server_id__mnemonic': u'lol'}, {'server_id__mnemonic': u'lol'}, {'server_id__mnemonic': u'lol'},.......] 

을하지만 JSON 형식으로 직렬화하려고 할 때 다음 예외 제기

>>> json_data = serializers.serialize('json',data) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\django\core\serializers\__init__.py", line 122, in serialize 
    s.serialize(queryset, **options) 
    File "C:\Python27\lib\site-packages\django\core\serializers\base.py", line 45, in serialize 
    concrete_model = obj._meta.concrete_model 
AttributeError: 'dict' object has no attribute '_meta' 
>>> type(data) 
<class 'django.db.models.query.ValuesQuerySet'> 

I've이 발견을 공식 Django 매뉴얼 says : 필드의 하위 집합 만 serialize하려는 경우 serializer에 fields 인수를 지정할 수 있습니다.

from django.core import serializers 
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size')) 

그러나이 코드를 사용하면 원하는 외래 키 값을 가져올 수 없습니다.

감사

답변

3

values() 당신에게 당신이 list로 변환하고 json 모듈을 사용하여 직렬화 할 수있는 ValuesQuerySet를 제공 할 필요가 여기 장고 serializers을 포함 없습니다 :

import json 
from task_manager.models import UserTasks 

data = UserTasks.objects.filter(user__username="root",server_id=2).values("server_id__mnemonic") 
print json.dumps(list(data)) 

또 다른 옵션은 사용이되어야 할 것이다인수가 지정되는 serializers.serialize() :

data = UserTasks.objects.filter(user__username="root",server_id=2) 
print serializers.serialize('json', data, fields=('server_id__mnemonic',)) 
+0

좋아, 고마워. 첫 번째 솔루션으로 문제를 해결할 수 있습니다. 그러나 두 번째 것은 외래 키 값을 표시하지 않습니다. 어쨌든 고마워 ;-) – user3750102

관련 문제