Как я могу разрешить ошибку django.db.models.query.QuerySet? Я пытаюсь использовать .groupby() для группировки элементов в моем api ответе.

Я использую django, и у меня возникли проблемы с использованием метода .groupby() из библиотеки pandas. Сообщение об ошибке, которое я получаю в Postman, звучит так: 'Value Error: Invalid file path or buffer object type: <class 'django.db.models.query.QuerySet'>'. Я пытался найти разумный ответ на Stack, в документации django и в других местах, но я не понимаю, что я ищу и как может выглядеть потенциальное решение.

В настоящее время возврат serialize_user_logs дает ответ API ниже, однако возврат grouping_by_programme выдает ошибку QuerySet.

Желаемый результат для ответа API на данные о групповых тренировках по типу программы следующий:

User = {
      id: 1,
      username: 'asd',
      email: 'asd£gmail.com',
      programmes: {
        chest: [
          {
            exercise_name: 'benchpress',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'fly',
            weight: [0],
            lastweight_update: []
          }
        ],
        back: [
          {
            exercise_name: 'rows',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'lat-pulldown',
            weight: [0],
            lastweight_update: []
          }
        ],
        shoulders: [
          {
            exercise_name: 'Overhead Press',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'lateral-raise',
            weight: [0],
            lastweight_update: []
          }
        ],
        arms: [
          {
            exercise_name: 'bicep-curl',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'dips',
            weight: [0],
            lastweight_update: []
          }
        ],
        legs: [
          {
            exercise_name: 'squats',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'leg-press',
            weight: [0],
            lastweight_update: []
          }
        ],
        core: [
          {
            exercise_name: 'situps',
            weight: [0],
            lastweight_update: []
          },
          {
            exercise_name: 'crunches',
            weight: [0],
            lastweight_update: []
          }
        ]
      }
    }

текущий ответ:

{
        "id": 1,
        "username": "admin",
        "programmes": {
            "Activities": [
                {
                    "exercise_weight": 12,
                    "date_completed": "2021-11-07T11:43:24.576923Z",
                    "exercise_name": "Curls",
                    "programme": "Arms",
                    "sets": 3,
                    "reps_per_set": 10
                },
                {
                    "exercise_weight": 10,
                    "date_completed": "2021-11-07T14:01:05.535240Z",
                    "exercise_name": "Curls",
                    "programme": "Arms",
                    "sets": 3,
                    "reps_per_set": 5
                },
                {
                    "exercise_weight": 40,
                    "date_completed": "2021-11-07T14:02:22.476082Z",
                    "exercise_name": "Squats",
                    "programme": "Legs",
                    "sets": 5,
                    "reps_per_set": 12
                }
            ]
        }
    }

serializers.py:

class UserSerializer(serializers.HyperlinkedModelSerializer):
    programmes = serializers.ReadOnlyField(
        source="build_user_programme")

    class Meta:
        model = User

        fields = ('id', 'username', 'password', 'programmes')

class ProgrammeSerializer(serializers.HyperlinkedModelSerializer):

    user = UserSerializer()

    class Meta:
        model = Programme
        fields = ('id', 'programmes', 'user')

models.py

import pandas as pd

    def build_user_programme(self):
        # 1 - get all exercise logs for user
        userlog = UserExerciseLog.objects.filter(
            user=self,).order_by("date_completed")
        print(userlog)
        # Here we're calling the variables in the model to be displayed / combined in the user data
        serialize_user_logs = [
            {'exercise_weight': x.exercise_weight, 'date_completed': x.date_completed, 'exercise_name': x.exercise.exercise_name, 'programme': x.exercise.programme.name, 'sets': x.sets, 'reps_per_set': x.reps_per_set} for x in userlog]

        # 2 - group together by program with groupby
        programme = Programme.objects.all()
        # # setting up a dataframe to use pandas
        data_frame = pd.DataFrame(programme)

        # # to_json used to convert and avoid serialization error
        data_frame.to_json(programme)
        # # using groupby method here
        grouping_by_programme = data_frame.groupby(programme)
        # return groupby here
        return {'activities': serialize_user_logs, 'programme': grouping_by_programme}
Вернуться на верх