我无法只从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()我正在检查值,目前它们是:python - 从QuerySet中仅提取不带键的值,并将它们保存到列表中-LMLPHP
但我只想检索值,不带密钥。例如:
python - 从QuerySet中仅提取不带键的值,并将它们保存到列表中-LMLPHP
任何帮助都将不胜感激

最佳答案

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值不对应,尽管这可能是非典型行为(在某些/大多数数据库系统中),但您通常不希望发生这种情况。这里还会产生两个查询,这是不高效的。
您可以先获取值,然后使用maps(或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/

10-12 21:57