On Wed, Jan 4, 2012 at 5:33 AM, Martin Tiršel <dja...@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+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to