我正在尝试从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"}]
我试过使用last
、get
等,但不起作用。
2条答案
按热度按时间3wabscal1#
因为,
get_queryset()
总是返回对象的查询集或对象的列表。不能从
get_queryset
方法返回对象或字段。将打印
last_price
值,但它是一个字段值,因此get_queryset
方法不会返回它。当你添加
[0]
时,它会从过滤后的查询集中获取第一个对象,直到此时,它还是一个对象的查询集。qncylg1j2#
有点hacky,我相信一定有更好的方法来做到这一点。
我希望获取基于单行(last_date_time)的
return
或last_price
值。我缠着质问:
现在我可以得到最后一行了。
在这里发帖以防有人花同样多的时间试图弄清楚这一点。如果你有正确的方法做这件事,请张贴。