Your Ad Here

Wednesday, January 4, 2012

Re: Checkboxes for a list of items like in Django admin interface

On Wed, Jan 4, 2012 at 5:33 AM, Martin Tiršel <django@blackpage.eu> wrote:
> Hello,
>
> I have a list of items (from a model) I want to display with checkboxes (for
> deleting multiple objects at once). The same behaviour like in django admin
> (change list). I can do such thing in templates:
>
> {% for item in item_list %}
> <li>
> <input type="checkbox" name="somename" value="item_{{ item.id }}">
> {{ item }}
> </li>
> {% endfor %}
>
> and in a view loop through somename list I get from POST and delete items.
> Is there a better Django way I should do it or this approach I wrote is
> correct? Is there a way I could use Django forms for processing the POST
> data and delete items in a form's method (so I can use it from multiple
> views)?
>

I do it in a form, because I like to keep all of the heavy logic out
of views and keep it in the models or the forms. Here is a relatively
complete example form from my codebase:

class DivisionRemovalForm(forms.Form):
class MultipleDivisionField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
url = reverse('organizer_division_view', kwargs={'div_pk': obj.pk})
label = '<a href="%s">%s</a>' % (url, obj.__unicode__())
return mark_safe(label)

divisions = MultipleDivisionField(queryset=[],
widget=forms.CheckboxSelectMultiple())

def __init__(self, competition, *args, **kwargs):
self.competition = competition
super(DivisionRemovalForm, self).__init__(*args, **kwargs)
self.fields['divisions'].queryset = self.competition.divisions.all()

def save(self):
for div in self.cleaned_data['divisions']:
units = div.units.all()
if units:
for unit in units:
unit.in_division = False
unit.save()
divisions = self.cleaned_data['divisions']
divisions.delete()

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

0 comments:

Post a Comment