Как я могу разрешить ошибку 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}