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
Теперь я могу получить последний ряд.
Размещаю здесь на случай, если кто-то потратит столько же часов, пытаясь разобраться в этом. Если у вас есть правильный способ сделать это, пожалуйста, напишите.