#json #django #django-models #django-rest-framework #django-serializer
#json #django #django-модели #django-rest-framework #django-сериализатор
Вопрос:
Я работаю с Python 3.9 и Django 3.1.6. У меня довольно длинная модель в models.py . Короткая версия выглядит примерно так:
class Check (models.Model):
@property
def total_body_fat_percentage(self):
if self.client_gender == "M":
total_body_fat_percentage = (self.Yuhasz * 0.097) 3.64
pass
else:
total_body_fat_percentage = total_body_fat_percentage = float((self.Yuhasz * 0.1429) 4.56)
return total_body_fat_percentage
@property
def muscle_weight_percentage(self):
muscle_weight_percentage =self.muscle_weight*100/self.weight
return muscle_weight_percentage
Эти поля возвращают число с плавающей запятой. Что-то вроде 14.407.
Конечно, там есть и другие поля, такие как Yuhasz, client_gender и т.д. Мне нужны эти значения в JSON. Я попытался использовать следующий сериализатор на serializer.py:
class PercentagesSerializer(ModelSerializer):
class Meta:
model = Check
fields = ('total_body_fat_percentage', 'muscle_weight_percentage')
И у меня есть следующий класс на views.py:
class PercentagesAPI(APIView):
authentication_classes = []
permission_classes = []
serializer = PercentagesSerializer
def get(self, request, format=None):
lista = Check.objects.all()
print(lista)
response = self.serializer(lista)
print(response)
json_response= json.dumps(response.data)
print(json_response)
data = {
'percentages': json_response
}
return Response(response.data)
Но он не возвращает никаких данных. Консоль оболочки заявляет, что она получает набор запросов, получает поля, но, похоже, не получает значения:
<QuerySet [<Check: Check object (1)>]>
PercentagesSerializer(<QuerySet [<Check: Check object (1)>]>):
total_body_fat_percentage = ReadOnlyField()
muscle_weight_percentage = ReadOnlyField()
{}
Заранее благодарю вас за ваши советы и помощь!
Комментарии:
1. Вы заполняете
data
переменную, но никогда не используете ее.2. @IvanStarostin Прошу прощения. Я в некотором роде любитель. Что вы подразумеваете под его использованием?
3. Есть ли изменения, которые вы намеревались вернуть в ответ
{'percentages': json_response}
?4. @IvanStarostin Я на самом деле следую структуре из charts.js (каким будет использование этих данных). Однако
json_response
это пустой массив.
Ответ №1:
Вы заполняете data
переменную, но никогда не используете ее. Вместо этого вы возвращаете response.data
response = self.serializer(lista)
data = {
'percentages': json_response
}
return Response(response.data)
Я считаю, что это решение:
response = self.serializer(lista, many=True) # <-- many
data = {
'percentages': json_response
}
return Response(data) # <-- data
Запрос возвращает что-то — печать показывает 1 запись / объект: Check object (1)
Комментарии:
1. Он возвращает пустой массив:
{ "percentages": "{}" }
2. Большое вам спасибо!!!! Я провел всю ночь, выясняя это, и теперь это решено!