首页 > 解决方案 > 是否可以将值添加到 for 循环中?

问题描述

我有一个 for 循环来迭代一个列表。在每次迭代中,我都有不同的值,我想将此值添加到我的上下文中。我正在尝试使用 context.update,但每次都会返回一个空的上下文。

    def get_context_data(self, **kwargs):
        context = super(Board_dets_view, self).get_context_data(**kwargs)
        id_board = self.object.id
        context['column_list'] = Column.object.filter(board_id=id_board)

        clist = Column.object.values_list('id', flat=True).filter(board_id=id_board)
        cCard = Card.object
        print(clist)
        for i in range(0, clist.count()):
            print('i=%s',i)

            cCard = Card.object.filter(column_id = clist[i])
            print('cCard=%s',cCard)
            context.update({'card_list': cCard})

        print(context)
        return context

cCard 返回正确的数据。我唯一需要的是将来自 cCard 的内容存储到 context['card_list'],但我所做的一切尝试都是空的。

标签: pythondjangolistviewdetailview

解决方案


不要这样过滤。这将产生n+1 个查询,每个查询一个Column。您可以使用以下命令检索Cards 的最后一个:

def get_context_data(self, **kwargs):
    context = super(Board_dets_view, self).get_context_data(**kwargs)
    context['column_list'] = Column.object.filter(board=self.object)
    context['card_list'] = Card.object.filter(column__board=self.object)
    print(context)
    return context

您可以使用两个连续的下划线 ( __) 来“透视”关系,例如 a ForeignKeyManyToManyField等。


推荐阅读