Skip to content
Advertisement

Is it possible to add values to context into a for loop?

I have a for loop to iterate a list. In every iteration i have a different value, and i want to add this value to my context. I’m trying using context.update, but every time this returns an empty context.

    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 returns correct data. The only thing I need is to store what come from cCard to context[‘card_list’], but evert attempt i made, was an empty result.

Advertisement

Answer

Please don’t filter that way. This will produce n+1 queries, one for each Column. You can retrieve the last of Cards with:

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

You can use two consecutive underscores (__) to look “through” relations like a ForeignKey, ManyToManyField, etc.

Advertisement