在 Django ORM 查询中的 defaultdict 上使用 .keys() 时出现 AttributeError

问题描述 投票:0回答:1

我正在开发一个 Django 项目,其中代码检索每个设备和接听线路组合的接听线路计数,并按总计数降序排列。 我正在尝试使用 Django ORM 从我的数据库中检索 Pickup_data_id 值的列表。但是,当我尝试在 defaultdict 对象上使用 .keys() 方法时,我遇到了 AttributeError。

这是我的代码:

from collections import defaultdict
from myapp.models import PickupAnalytics
def most_viewed_pickup_line_by_device(request):
    analytics_data = PickupAnalytics.objects.all()

    highest_count = defaultdict(int)

    for data in analytics_data:
        pickup_line_id = data.pickup_data_id
        device_id = data.analytics_id

        count = PickupAnalytics.objects.filter(pickup_data_id=pickup_line_id, analytics_id=device_id).count()
        if count > highest_count[device_id]:
            highest_count[device_id] = count

    pickup_data_ids = []

    for device_id, highest_count in highest_count.items():
        pickup_data_ids = PickupAnalytics.objects.filter(analytics_id=device_id, pickup_data_id__in=highest_count.keys()).values_list('pickup_data_id', flat=True).distinct()
        return pickup_data_ids

当我运行此代码时,出现以下错误:

属性错误:“int”对象没有属性“keys”

我怀疑这个问题可能与我在最高计数字典上使用 .keys() 的方式有关。有人可以帮助我了解导致此错误的原因以及如何修复它吗?

python django-models filtering django-queryset
1个回答
0
投票

问题出在这里:

一开始你正在做:

highest_count = defaultdict(int)

现在,在这个循环中

for device_id, highest_count in highest_count.items():

highest_count
highest_count.items()
defaultdict

的值

当你做的时候(更改了highest_count的名称以防止重叠):

for device_id, count in highest_count.items():
    pickup_data_ids = PickupAnalytics.objects.filter(analytics_id=device_id, pickup_data_id__in=count.keys()).values_list('pickup_data_id', flat=True).distinct()
    return pickup_data_ids

尝试打印要调试的值。

看起来

count
是一个整数

print([(device_id, count) for device_id, count in highest_count.items()]
© www.soinside.com 2019 - 2024. All rights reserved.