-2

我正在尝试将数据库记录中的数据传递到列表中。

这是我的代码:(在我看来)

dates_queryset = Profile.objects.all().filter(user=request.user)
    dates = []
    weights = []
    num = 1
    for qr in dates_queryset:
        dates.append(qr.date)
        weights.append(qr.weight)
        num += 1
4

2 回答 2

1

使用 Django 内置方法 values_list() ( https://docs.djangoproject.com/en/3.1/ref/models/querysets/#values-list ):

dates_queryset = Profile.objects.filter(user=request.user)
dates = dates_queryset.values_list('date', flat=True)
weights = dates_queryset.values_list('weight', flat=True)

此外,当您想要过滤它们时,您不需要先选择所有对象(https://docs.djangoproject.com/en/3.1/topics/db/queries/#retrieving-specific-objects-with-filters

于 2020-09-23T10:34:13.977 回答
0

由于 Petr 已经为您提供了(理想的)Django 风格的答案,这里有一个关于如何使用列表理解将任何可迭代对象放入列表的 Pythonic 答案。

# Leave out .all(), if you already have .filter()
dates_queryset = Profile.objects.filter(user=request.user)

dates = [qr.date for qr in dates_queryset]
weights = [qr.weight for qr in dates_queryset]
num = len(dates_queryset)

您可以使用 zip() 进一步缩短它:List comprehension with tuple assignment

dates_queryset = Profile.objects.filter(user=request.user)

dates, weights = zip(*[(qr.date, qr.weight) for qr in dates_queryset])
num = len(dates_queryset)
于 2020-09-23T10:54:40.013 回答