JsonResponse与模型实例包括M2M

时间:2014-11-11 19:13:05

标签: django django-serializer jsonresponse

似乎你无法取代

from django.core import serializers
from django.http import HttpResponse, JsonResponse

qs = MyModel.objects.filter(pk=1)
data = serializers.serialize('json', qs, fields=('id', 'name', 'my_m2m_field'))
# I want data of the one instance only.
data = data[data.find('{', 3, 15):data.rfind('}', -60, -3) + 1]
return HttpResponse(data, content_type='application/json')

JsonResponse,你呢? (我并不是要用return JsonResponse(data)替换最后一行,因为这在我看来没有意义。)

导致错误:

my_m2m_ids = qs[0].my_m2m_field.all().values_list('id', 'flat=True') # = [3, 2]
dic = {'my_m2m_ids': my_m2m_ids} # also tried `my_m2m_ids[:]`
dic.update(qs.values('id', 'name')[0]) # also tried `list(qs.`… and `dict(qs.`…
return JsonResponse(dic) # also tried `safe=False`

错误:TypeError at <path> [3, 2] is not JSON serializable。我不确切知道为什么,但我认为ValuesQuerySetvalues()ValuesListQuerySet values_list()归来的ValuesListQuerySet以某种方式造成了这种情况。

有没有更好/更短的解决方案?因为我认为这都不理想。

更新

list转换为my_m2m_ids = list(my_m2m_ids)my_m2m_ids[:]后,它会有效,但JsonResponse显然不起作用。)

但我仍然喜欢能够像这样使用return JsonResponse(MyModel.objects.get(pk=1).only('id', 'name', 'my_m2m_field)): {{1}}(或类似)。

0 个答案:

没有答案