Problem solved thanks to Adrian.

Added:
from django.utils.datastructures import MultiValueDict

and I added the following to the SortedCheckBox widget:

    def value_from_datadict(self, data, name):
        if isinstance(data, MultiValueDict):
            return data.getlist(name)
        return data.get(name, None)



On Jul 5, 9:30 pm, danylo <[EMAIL PROTECTED]> wrote:
> I can't get a form to validate and for the life of me, can't figure
> out why.
>
> I keep getting an error on the topics.  Regardless of how many I
> choose, it returns an "Enter a list of values." error.  It looks like
> even though the form returns a list of topics, it doesn't send the
> list to the validator, just a single value.
>
> I've also tried converting the topics bit to a MutlipleChoiceField,
> but didnt' have any mroe luck with it.
>
> Any suggestions of where to look are much appreciated.  Thanks,
>
> dan
>
> class AddBlogForm(forms.Form):
>     def __init__( self, *args, **kwargs ):
>         super( AddBlogForm, self ).__init__( *args, **kwargs )
>         self.fields['location'] =
> GroupedChoiceField(choices=location_drop_tags())
>         self.fields['topics'] = forms.ModelMultipleChoiceField(
>         queryset=Tags.objects.exclude(location__exact=True).order_by('-
> parent_tag', 'tag'), widget=SortedCheckBox)
>     owner = forms.CharField()
>     password = forms.CharField(widget=forms.PasswordInput)
>     url = forms.URLField(initial='http://', verify_exists=True)
>     title = forms.CharField(max_length=100)
>     description = forms.CharField(max_length=500, required=False,
>         widget=forms.Textarea(attrs={'rows': '3'}))
>
> (this is the widget used for the topic)
> class SortedCheckBox(forms.Select):
>     def render(self, name, value, attrs=None, choices=()):
>         from django.utils.html import escape
>         from django.newforms.util import flatatt, smart_unicode
>         final_attrs = self.build_attrs(attrs, name=name)
>         output = []
>         if value is None:
>             value = ''
>         str_value = tuple([smart_unicode(v) for v in value])
>         for t in
> self.choices.queryset.filter(parent_tag__isnull=True):
>             output.append(u'<div style="width:100px; float:left;">')
>             option_value = smart_unicode(t.id)
>             option_label = smart_unicode(t.tag)
>             selected_html = (option_value in str_value) and u'checked
> ' or ''
>             output.append(u'<input type="checkbox" name="topics"
> value="%s" %s/><b>%s</b><br />' % (option_value, selected_html,
> option_label))
>             for t_child in
> self.choices.queryset.filter(parent_tag__tag=t.tag):
>                 option_value = smart_unicode(t_child.id)
>                 option_label = smart_unicode(t_child.tag)
>                 selected_html = (option_value in str_value) and
> u'checked ' or ''
>                 output.append(u'<input type="checkbox" name="topics"
> value="%s" %s/>%s<br />' % (option_value, selected_html,
> option_label))
>             output.append(u'</div>')
>         return u'\n'.join(output)


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to