def table_w_checkboxes(request): if request.method == 'POST': for o in request.POST.iterkeys(): print o # this is the name value of the checkbox # do stuff with what ever value you put in the name attr of input # tag return HttpResponseRedirect(reverse('to-where-ever')) else: objects = Model.objects.all() return render(request, 'table_w_checkboxes.html', {'objects': objects})

First of all, no need for a special form. I did not use any form.

Secondly, see that for loop? That's the part that matters.

request.POST.iterkeys() holds a list of all 'name' attrs of checked check boxes. Meaning, those items that were not checked will not be in this list.

In my case, name attr holds objects' id's. So, o is an id of an object that was checked. Now I can do whatever I need with it. I can do Model.objects.get(id=o), or add the object to another objects relation field - MyrelatedModel.m2mfield.add(o), for example.

Thats it! Now you can show users a table of objects to choose from and to select what they need. If you have any more questions, feel free to comment ;)