Django Как отформатировать JSON ответ от drf API?

Я хотел бы узнать, как изменить способ представления JSON-ответов моих запросов к API, созданных с помощью DRF, табуляции, пробелов и т.д..., чтобы точно отвечать на запросы моего фронтенд-приложения.

У меня есть следующий код:

Мой экстракт models.py:

class Email(models.Model):
    user_email = models.CharField(primary_key=True, max_length=200)
    user_phone_number = models.IntegerField()
    user_device_id = models.CharField(max_length=200)#request.META.get('HTTP_DEVICE', '')
    lat = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
    lng = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True)
    user_address = models.CharField(max_length=200)
    creation_date = models.DateTimeField(default=None)
    email_status = models.BooleanField(default=False)
    email_score = models.IntegerField()
    valid_email = models.BooleanField(default=False)
    fraud = models.BooleanField(default=False)

Мой экстракт views.py:

class UserListView(APIView):
    serializer_class = EmailSerializer
    queryset = Email.objects.all()
    pagination_class = StandardResultsSetPagination
    
    def get_serializer_class(self):
        if self.action == 'list':
            return EmailListSerializer
        return EmailSerializer
    
    def post(self, request, *args, **kwargs):
        parametros = request.POST
        email='email=' + request._full_data['user_email']
        response = UserConnector(email).get_user_data()
        obgs = response[1]['results']
        if len(obgs) == 0:
            user_email = self.request.POST.get('user_email')
            email_stat = ''
            email_scor = ''
            email_valid = ''
            frau = ''
        else:
            obg = response[1]['results'][0]

            user_email = self.request.POST.get('user_email')
            email_stat = obg.get('email_status')
            email_scor = obg.get('email_score')
            email_valid = obg.get('valid_email')
            frau = obg.get('fraud')

        NewEmail = Email(
            user_email = user_email,
            user_phone_number = self.request.POST.get('user_phone_number'),
            user_device_id = request.META.get('HTTP_DEVICE', ''),
            lat = self.request.POST.get('lat'),
            lng = self.request.POST.get('lng'),
            user_address = self.request.POST.get('user_address'),
            creation_date = timezone.now,
            email_status = email_stat,
            email_score = email_scor,
            valid_email = email_valid,
            fraud = frau
        )
    NewEmail.save()
    serializer = EmailSerializer(NewEmail)
    return Response(serializer.data)

Я получил следующий JSON-ответ:

{
    "user_email": "meloadik@gmail.com",
    "user_phone_number": 8117904544,
    "user_device_id": "",
    "lat": "20.9750000000000000",
    "lng": "89.6141400000000000",
    "user_address": "rfm mz5 lt4",
    "creation_date": "2022-08-23T22:47:13.687178Z",
    "email_status": null,
    "email_score": 0,
    "valid_email": 0,
    "fraud": 0
}

Я хочу знать, как отформатировать ответ JSON по-другому, например так:

{
    "email_response": {
    "user_email": "carl@trully.ai",
    "creation_date": "2020/06/01",
    "email_status": "active",
    "email_score": 910,
    "valid_email": 1,
    "fraud": 0
    },
    "phone_response": {
        "user_phone_number": 8117904544,
    }

}

Или модифицировать мой JSON-ответ с помощью различных типов стилей, табуляций, пробелов и т.д...

Быстрым решением будет изменение метода EmailSerializer to_representation на что-то вроде этого (псевдокод):

def to_representation(self, instance):
    representation = super(EmailSerializer, self).to_representation(instance)

    new_representation = {}

    new_representation['email_response'] = {field: representation.get(field) for field in email_fields}
    new_representation['phone_response'] = {field: representation.get(field) for field in phone_fields}

    return new_representation
Вернуться на верх