我无法只从QuerySet获取值。
我有我的桌子:
class Temperature(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.TextField(blank=True, null=True)
value = models.IntegerField(blank=True, null=True)
time = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'temperature'
and in views.py:
class ChartData(APIView):
authentication_classes = []
permission_classes = []
def get(self, request, format=None):
labels = list(Temperature.objects.using('sensors').values('time'))
temp_values = list(Temperature.objects.using('sensors').values('value'))
data = {
"labels": labels,
"temperature": temp_values,
}
return Response(data)
在html文件中使用console.log()我正在检查值,目前它们是:
但我只想检索值,不带密钥。例如:
任何帮助都将不胜感激
最佳答案
You can use values_list(..)
[Django-doc] instead, and specify flat=True
, like:
def get(self, request, format=None):
labels = list(Temperature.objects.using('sensors').values_list('time', flat=True))
temp_values = list(Temperature.objects.using('sensors').values_list('value', flat=True))
# ...
但上述情况并不安全。。这意味着两个查询可能会导致数据不“匹配”,因为第一个
time
值本身与第一个value
值不对应,尽管这可能是非典型行为(在某些/大多数数据库系统中),但您通常不希望发生这种情况。这里还会产生两个查询,这是不高效的。您可以先获取值,然后使用
map
s(或zip
)进行转置,如:from operator import itemgetter
def get(self, request, format=None):
qs = Temperature.objects.using('sensors').values_list('time', 'value')
labels = list(map(itemgetter(0), qs))
temp_values = list(map(itemgetter(1), qs))
# ...
关于python - 从QuerySet中仅提取不带键的值,并将它们保存到列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53239534/