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

Теперь я могу получить последний ряд.

Размещаю здесь на случай, если кто-то потратит столько же часов, пытаясь разобраться в этом. Если у вас есть правильный способ сделать это, пожалуйста, напишите.

Вернуться на верх