@Bill

Thanks.  I just stumbled across that widget.  I know models.Model
weren't there, I was trying to simplify thinking we'd all know they
were there.  I guess, never assume ;)

Looks like I don't even have to worry about that check_test field
after all.  Using initial worked perfectly.

def get_form(item):
    fields = {}
    choices = [(c.id, c.name) for c in Cat.objects.all()]
    selections = [c.name.id for c in item.category_set.all()]
    fields['cat'] = forms.MultipleChoiceField(
        label=item,
        required=False,
        choices = choices,
        initial=selections,
        widget = forms.CheckboxSelectMultiple()
    )
    return type('CatForm', (forms.BaseForm,), {'base_fields': fields})
()




On Aug 6, 3:09 pm, Bill Freeman <ke1g...@gmail.com> wrote:
> There is a CheckBoxSelectMultiple widget in django.forms, suitable
> for use with a forms.ModelMultipeChoiceField, and probably with
> other stuff.    Doesn't it do what you need?  Or are you just reinventing
> the wheel.
>
> And, of course, your code as shown doesn't work because Cat and
> Category are not based on django.db.models.Model .
>
> On Fri, Aug 6, 2010 at 2:41 PM, lingrlongr <keith.ebe...@gmail.com> wrote:
> > Forgo the most important part.  I want to be prompted with a
> > checkboxes that show which categories are selected, as well as the
> > ones that aren't.
>
> > On Aug 6, 2:13 pm, lingrlongr <keith.ebe...@gmail.com> wrote:
> >> Having difficulty getting the check_test to work.  Can't find any
> >> examples out there that help.  I'll probably have to give a little
> >> background.  I simplified where able to...
>
> >> class Cat:
> >>   name = CharField
>
> >> class Category:
> >>   name = ForeignKey(Cat)
> >>   weight = DecimalField
> >>   item = ForeignKey('Item')
>
> >> class Item:
> >>   name = CharField
>
> >> Basically Cat is a model of all categories and Category is a model of
> >> which Cat's are assigned to an item.  I did it this way because I want
> >> to have a "master list" of categories, then have the mapping done in
> >> other models.
>
> >> So now I want to build a form at run-time.
>
> >> def get_form(item):
> >>   fields = dict()
> >>   cat_choices = [(c.id, c.name) for c in Cat.objects.all()]
> >>   for c in cat_choices:
> >>     id, name = c
> >>     checked = bool(item.categoty_set.filter(pk=id).count())
>
> >>     fields['item_cat_%d' % id] = forms.ChoiceField(
> >>       label = name,
> >>       required = False,
> >>       choices = cat_choices,
> >>       widget = forms.CheckboxInput(
> >>         attrs={'value': checked},
> >>         check_test = lambda a: a == checked
> >>       )
> >>     )
> >>     return type('CatSelectForm', (forms.BaseForm,), {'base_fields':
> >> fields})
>
> >> So how can I get the correct checkboxes checked at runtime when the
> >> template is rendered?
>
> >> Thx.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Django users" group.
> > To post to this group, send email to django-us...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > django-users+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@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