生のSQL文を実行したいと考え模索していたが、今回のエラーが解決できたので備忘録として残す。
##エラー内容
Object of type "AA" is not JSON serializable
とエラーが出た
AAはJson形式ではないという内容
##解決
views.py
from .models import BaseAPI
from .serializer import BaseAPISerializer
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response
class BaseAPIViewSet_GET(APIView):
def get(self, request, pk, format=None):
sql = "SQL文"
queryset = BaseAPI.objects.raw(sql,pk)
return Response(queryset.query) #ここが解決ポイント
urls.py
path('user/<int:pk>/test', BaseAPIViewSet_GET.as_view(), name='GET'),
ちなみにSQL文について
変数を使用した複数行に渡ってSQL文を書きたいと考えていた時があったが、
SELECT * FROM api WHERE name1=(SELECT name2 FROM api WHERE id=%s)
views.py
queryset = BaseAPI.objects.raw(sql,[pk]) #ここで実行
SELECTの中にSELECTを書くことが可能なため、一行のSQL文で自在に操作が可能