Python 类型错误:';abc&x27;对象不可下标

Python 类型错误:';abc&x27;对象不可下标,python,django,lambda,highcharts,django-views,Python,Django,Lambda,Highcharts,Django Views,我正在尝试使用此链接在django应用程序中显示图表 这是我的观点 def json_example(request): return render(request, 'classroom/teachers/json_example.html') def chart_data(request): dataset = DispatchPlan.objects.all() print("dataset is ", dataset) # port_display_n

我正在尝试使用此链接在django应用程序中显示图表

这是我的观点

def json_example(request):
    return render(request, 'classroom/teachers/json_example.html')

def chart_data(request):
    dataset = DispatchPlan.objects.all()
    print("dataset is ", dataset)

    # port_display_name = dict()
    # for port_tuple in Passenger.PORT_CHOICES:
    #     port_display_name[port_tuple[0]] = port_tuple[1]

    chart = {
        'chart': {'type': 'pie'},
        'title': {'text': 'Titanic Survivors by Ticket Class'},
        'series': [{
            'name': 'Embarkation Port',
            'data': list(map(lambda row: {'name': row['weight'], 'y': row['route_distance']}, dataset))
        }]
    }

    return JsonResponse(chart)
当我运行应用程序时,它显示以下错误:

TypeError:“DispatchPlan”对象不可订阅

在这一行

'data': list(map(lambda row: {'name': row['weight'], 'y': row['route_distance']}, dataset))
我猜测它是因为我没有正确地映射它,我如何解决这个问题

回溯:

回溯:

文件 “C:\Users\Sid\AppData\Local\Programs\Python37\lib\site packages\django\core\handlers\exception.py” 在内部 35响应=获取响应(请求)

文件 “C:\Users\Sid\AppData\Local\Programs\Python37\lib\site packages\django\core\handlers\base.py” 你得到了什么回应 128response=self.process\u异常\u由\u中间件(e,请求)

文件 “C:\Users\Sid\AppData\Local\Programs\Python37\lib\site packages\django\core\handlers\base.py” 你得到了什么回应 126响应=包装的回调(请求,*回调参数,**回调参数)

文件 “D:\Downloads HDD\aggregator master\django\u school\教室\views\teachers.py” 在图表数据中 884. '数据“:[{'name':row.weight,'y':数据集中行的row.route_distance}]

文件 “D:\Downloads HDD\aggregator master\django\u school\教室\views\teachers.py” 在里面 884. '数据“:[{'name':row.weight,'y':数据集中行的row.route_distance}]

异常类型:AttributeError at/shipper/json示例/data/ 异常值:“dict”对象没有属性“weight”

Models.py

class DispatchPlan(models.Model):
    bid_status_choices = (
        ('Hold', 'Hold'), ('Active', 'Active'), ('Assigned', 'Assigned'), ('Dispatched', 'Dispatched'),
        ('Delayed', 'Delayed'), ('Delivered', 'Delivered'))
    mtypes = (('Fragile', 'Fragile'), ('Non-Fragile', 'Non-Fragile'))

    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='dispatch_quizzes')
    comments = models.TextField(max_length=256)
    truck_type = models.ForeignKey(truck_type, on_delete=models.CASCADE, related_name='dispatch_type')
    truck_name = models.ForeignKey(truck_name, on_delete=models.CASCADE, related_name='dispatch_name')
    origin = models.CharField(max_length=255, default=0)
    destination = models.CharField(max_length=255, default=0)
    total_trucks = models.IntegerField(default=0)
    material_type = models.CharField(max_length=255, default=0, choices=mtypes)
    scheduled_date = models.DateTimeField(max_length=255, default=0)
    offered_price = models.IntegerField(default=0)
    weight = models.IntegerField(default=0)
    status = models.CharField(max_length=255, default='Active', choices=bid_status_choices)
    created_on = models.DateTimeField(auto_now_add=True)
    route_distance = models.IntegerField(default=0)
    route_tat = models.CharField(max_length=255, default=0)
    etd = models.DateTimeField(default=timezone.now)
    eta = models.DateTimeField(default=timezone.now)
    route_link = models.CharField(max_length=255, default=0)

模型实例不是字典,它们是具有属性的对象。您需要使用点表示法:

'data': list(map(lambda row: {'name': row.weight, 'y': row.route_distance}, dataset))
还要注意的是,这段代码并不特别适合Python。使用列表理解更为惯用:

'data': [{'name': row.weight, 'y': row.route_distance} for row in dataset]

它给了我
AttributeError:“dict”对象没有属性“weight”
,但我的DispatchPlan中有weight显示完整的回溯。添加了问题中的回溯,但您显示的代码无法实现。数据集是一个dict列表,在这种情况下,您的原始代码可以工作,或者它是一个实例列表,在这种情况下,我的代码可以工作。我可以看到它是什么。也许您应该显示原始代码的完整回溯。