在使用Django進行開發的過程中,有時候需要將一些 complex object 轉換成 JSON 格式,從而便于在前端進行處理。在 Django 中,有一個非常方便的方法可以實現這種 JSON 數據的嵌套結構。
首先需要在視圖函數中使用 Django 的序列化模塊:
from django.core import serializers def my_view(request): # your view code here data = serializers.serialize('json', MyModel.objects.all()) # rest of your view code here
上述代碼將 MyModel 中的所有數據以 JSON 格式返回,但是如果需要嵌套一些外鍵等關系,可以使用 Django 的 Serializer class 來實現:
from django.core import serializers from django.core.serializers.json import DjangoJSONEncoder from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator class MyModelDetailView(View): model = MyModel @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(MyModelDetailView, self).dispatch(request, *args, **kwargs) def get(self, request, pk, format=None): m_obj = self.model.objects.get(pk=pk) data = serializers.serialize('python', [m_obj])[0] data['related'] = serializers.serialize('python', m_obj.related.all()) json_data = json.dumps(data, cls=DjangoJSONEncoder) return HttpResponse(json_data, content_type='application/json')
上述代碼將相應的 model 以 python 形式進行序列化,并添加一個 related 屬性,并將數據轉換成 JSON 格式返回。