Django REST Framework - возвращать значение из get_queryset?
Я пытаюсь вернуть value из get_queryset.
def get_queryset(self):
if self.request.user.is_superuser:
return StockPriceModel.objects.order_by('ticker').distinct()
elif not self.request.user.is_authenticated:
print('in')
print(self.request.data)
last_price = StockPriceModel.objects.all().filter(
ticker=self.request.data['ticker']).order_by('-last_date_time')[0].last_price
print(last_price)
return last_price
последняя цена печатается без выпуска.
В return я получаю различные ошибки:
TypeError at /api/stock-prices-upload/ объект 'float' не является итерируемым
Если я попытаюсь return до:
StockPriceModel.objects.all().filter(
ticker=self.request.data['ticker']).order_by('-last_date_time')
Это работает.
Как только я пытаюсь вернуть только кверисет позиций 0, я получаю ошибки.
Я предполагаю, что это потому, что get_queryset должен возвращать queryset. Не уверен, как вернуть только значение
Потому что get_queryset() всегда возвращает кверисет объектов или список объектов.
Вы не можете вернуть объект или поле из метода get_queryset.
значение last_price будет напечатано, но это значение поля, и поэтому метод get_queryset его не вернет.
Когда вы добавляете [0], берется первый объект из отфильтрованного кверисета. До этого момента это кверисет объектов.
Немного халтурно, и я уверен, что должен быть лучший способ сделать это.
Я хотел получить return либо одну строку (last_date_time), либо last_price значение.
Я обернул запрос:
# removed the .last_price
last_price = StockPriceModel.objects.all().filter(
ticker=self.request.data['ticker']).order_by('-last_date_time')[0]
last_price = [last_price] # made it into a list, i.e. iterable
return last_price
Теперь я могу получить последний ряд.
Размещаю здесь на случай, если кто-то потратит столько же часов, пытаясь разобраться в этом. Если у вас есть правильный способ сделать это, пожалуйста, напишите.