Django REST框架-从get_queryset返回一个值?

6jjcrrmo  于 2022-12-05  发布在  Go
关注(0)|答案(2)|浏览(175)

我正在尝试从get_queryset返回一个value

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中,我得到各种错误:
/api/stock-prices-upload/处的TypeError“浮点”对象不可迭代
如果我尝试return直到:

StockPriceModel.objects.all().filter(
                ticker=self.request.data['ticker']).order_by('-last_date_time')

这很管用。
只要我尝试只返回0位置查询集,就会出现错误。
我假设这是因为get_queryset应该返回queryset。不知道如何只返回值。
编辑:
我现在尝试从数据中只获取最新的行(即[0]),但仍然会得到相同的错误(即
StockPriceModel对象不可迭代

# The current output if I don't add the [0] i.e. try to get the last row of data

[{"id":23,"last_price":"395.2","name":null,"country":null,"sector":null,"industry":null,"ticker":"HINDALCO","high_price":null,"last_date_time":"2022-10-20T15:58:26+04:00","created_at":"2022-10-20T23:20:37.499166+04:00"},{"id":1717,"last_price":"437.5","name":null,"country":null,"sector":null,"industry":null,"ticker":"HINDALCO","high_price":438.9,"last_date_time":"2022-11-07T15:53:41+04:00","created_at":"2022-11-07T14:26:40.763060+04:00"}]

预期响应:

[{"id":1717,"last_price":"437.5","name":null,"country":null,"sector":null,"industry":null,"ticker":"HINDALCO","high_price":438.9,"last_date_time":"2022-11-07T15:53:41+04:00","created_at":"2022-11-07T14:26:40.763060+04:00"}]

我试过使用lastget等,但不起作用。

3wabscal

3wabscal1#

因为,get_queryset()总是返回对象的查询集或对象的列表。
不能从get_queryset方法返回对象或字段。
将打印last_price值,但它是一个字段值,因此get_queryset方法不会返回它。
当你添加[0]时,它会从过滤后的查询集中获取第一个对象,直到此时,它还是一个对象的查询集。

qncylg1j

qncylg1j2#

有点hacky,我相信一定有更好的方法来做到这一点。
我希望获取基于单行(last_date_time)的returnlast_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

现在我可以得到最后一行了。
在这里发帖以防有人花同样多的时间试图弄清楚这一点。如果你有正确的方法做这件事,请张贴。

相关问题