Может ли Djago создать запрос к базе данных, который возвращает словарь словарей?

Может ли Djago создать запрос к базе данных, который возвращает словарь словарей?

Модель содержит внешний ключ. Используя эти ключи, я хотел бы отсортировать результаты запроса. Затем я хотел бы предоставить эти результаты с помощью rest framework.

Иллюстративная модель:

class Record(BaseModel):

    evse = models.ForeignKey(
        'core.Evse',
        verbose_name=_('EVSE'),
        related_name='record_evse',
        on_delete=models.CASCADE,
    )

    current_rms_p1 = models.FloatField(
        _('Current RMS P1'),
        default=0,
        validators=(
            MinValueValidator(0),
            MaxValueValidator((2**16 - 1) * 0.1),
        )
    )

    current_rms_p2 = models.FloatField(
        _('Current RMS P2'),
        default=0,
        validators=(
            MinValueValidator(0),
            MaxValueValidator((2**16 - 1) * 0.1),
        )
    )

    current_rms_p3 = models.FloatField(
        _('Current RMS P3'),
        default=0,
        validators=(
            MinValueValidator(0),
            MaxValueValidator((2**16 - 1) * 0.1),
        )
    )

Вид:

class RecordListAPIView(generics.ListAPIView):
    queryset = Record.objects.all()
    serializer_class = RecordSerializer

    def get_queryset(self):
        return Record.objects.all()

Как изменить запрос, чтобы получить такой результат?

{
    "evse 1": [
        {
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0
        },
        {
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0
        }
    ],
    "evse 2": [
        {
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0
        }
    ]
}

Или такой результат:

[
    [
        {
            "evse": 1,
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0
        },
        {
            "evse": 1,
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0
        }
    ],
    [
        {
            "evse": 2,
            "current_rms_p1": 0.0,
            "current_rms_p2": 0.0,
            "current_rms_p3": 0.0,
        }
    ]
]
class EVSESerializer(serializers.ModelSerializer):
    record_evse = RecordSerializer(read_only=True, many=True)

    class Meta:
        model = Evse
        fields = '__all__'



class EvseListAPIView(generics.ListAPIView):
    queryset = Evse.objects.prefetch_related()
    serializer_class = EVSESerializer

    def get_queryset(self):
        return Evse.objects.all()

Затем добавьте это представление в ваш urls.py и т.д...

Тогда, когда объекты Evse будут сериализованы, отчеты тоже будут сериализованы

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