我有一個有很多字段的模型,但是對於這個問題,我只需要其中的3個字段。當我嘗試序列化.values
集我得到一個異常django將queryset.values()序列化爲json
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
我有一個有很多字段的模型,但是對於這個問題,我只需要其中的3個字段。當我嘗試序列化.values
集我得到一個異常django將queryset.values()序列化爲json
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
Django的串行只能序列化的查詢集,values()
不返回查詢集寧ValuesQuerySet
對象。所以,請避免使用values()
。相反,specifiy要在values()
使用領域,在序列化方法如下:
看這個SO question例如
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))
而不是使用objectQuerySet.values('fileName','id')
,採用的serializers.serialize()
的fields
參數指定這些領域如上所示。從objectQuerySet
是的,我知道' .values()'返回一個列表,然而simplejson.dumps給了我一個'jsondata不是JSON serializable','ValuesQuerySet'的形式是:'[{'key1':'value1','key2':'value2 '}]' –
是的,這取決於數據的樣子,鏈接答案的第一個例子就是你要找的。 –
@ bash-先調用'list()'。 –
使列表:
data_ready_for_json = list(ConventionCard.objects.filter(ownerUser = user).values('fileName','id'))
這對我來說是最快和最簡單的解決方案。我追加了'JsonResponse(data_ready_for_json,safe = False)',它在Ajax調用中完美運行。 –
只投與dict每一個項目,並創建json.dumps JSON:
json.dumps([dict(item) for item in SomeModel.objects.all().values('id', 'title')])
正如其他人所說的,Django的serializers無法處理ValuesQuerySet。但是,您可以使用標準json.dumps()
進行序列化,並使用list()
將您的ValuesQuerySet轉換爲列表。如果您的設置包含Decangs等Django字段,則需要傳入DjangoJSONEncoder。因此:
import json
from django.core.serializers.json import DjangoJSONEncoder
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder)
您收到了什麼異常? – Constantinius
''dict'對象沒有任何屬性'_meta'' –
你用'queryset = myModel.objects.filter(foo_icontains = bar).values('foo.f1','foo.f2','foo。 F3' )'? – Constantinius