@Enter_a_nickname

Serializer django rest framework. Как изменить структуру json?

Доброго времени суток. В моем проекте django необходимо реализовать api с методом get.
Вот часть моего кода:

models.py:
class Color(models.Model):
    temp = models.IntegerField(max_value=None, min_value=1)
    correct = models.BooleanField()
    top = models.IntegerField(max_value=None, min_value=1)
    bottom = models.IntegerField(max_value=None, min_value=1)

class Speed(models.Model):
    start = models.TimeField()
    end = models.TimeField()

class Dog(models.Model):
    name = models.CharField(max_length=50)
    number = models.IntegerField(max_value=None, min_value=1)
    speed = models.ForeignKey('Speed', on_delete=models.CASCADE, null=True, blank=True)

class DogRequest(models.Model):
    id_name = models.IntegerField(max_value=None, min_value=1)
    colors = models.ForeignKey('color', on_delete=models.CASCADE, null=True, blank=True)
    dogs = models.ForeignKey('dog', on_delete=models.CASCADE, null=True, blank=True)
    DataTime = models.DateTimeField()


serializers.py:

class ColorSerilizer(serializers.Serializer):
    temp = serializers.IntegerField(max_value=None, min_value=1)
    correct = serializers.BooleanField()
    top = serializers.IntegerField(max_value=None, min_value=1)
    bottom = serializers.IntegerField(max_value=None, min_value=1)

class SpeedSerializer(serializers.Serializer):
    start = serializers.TimeField()
    end = serializers.TimeField()

class DogSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=50)
    number = serializers.IntegerField(max_value=None, min_value=1)
    speed = SpeedSerializer()

class DogRequestSerializer(serializers.Serializer):
    id_name = serializers.IntegerField(max_value=None, min_value=1)
    color = ColorSerilizer()
    dog = DogSerializer()
    DataTime = serializers.DateTimeField()


мой views.py:

@csrf_exempt
def DogRequestApi(request, id=0):
    if 'GET' == request.method:
        DogRequests = DogRequest.objects.all()
         DogRequest_serializer = DogRequestSerializer(DogRequests)
        return JsonResponse(DogRequest_serializer.data, safe=False)


При проведении запроса get через постман я получаю следующую структуру:

{
    "id_name": 44,
    "color": {
        "temp": 33,
        "correct": true,
        "top": 33,
        "bottom": 33,
    },
    "dog": {
        "name": "bobi",
        "number": 33,
        "speed": {
            "start": "10:07:21",
            "end": "10:07:22"
        }
    },
    "DataTime": "2022-02-11T10:07:29Z"


Необходимо исправить один нюанс, блоков "dog" может быть несколько.
Как сделать следующую структуру?

{
    "id_name": 44,
    "color": {
        "temp": 33,
        "correct": true,
        "top": 33,
        "bottom": 33,
    },
    "dog": [{
        "name": "bobi",
        "number": 33,
        "speed": {
            "start": "10:07:21",
            "end": "10:07:22"
        }
    },
    "DataTime": "2022-02-11T10:07:29Z"
   }]...
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
dog = DogSerializer(many=True)
в DogRequestSerializer
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы