I'm on my phone, and therefore read your message really quickly, so
excuse me if I misunderstood the issue.

A few questions:

* Have you considered using a custom widget for the form?
* What does the ancillary data look like?
* Could you paste the relevant model, form and view? I find it easier
to understand issues like this if I'm looking at the code. And don't
worry, we won't judge! Just yesterday I caught myself using 'is' for
string comparison, so your code is probably better than mine =)

Also, love the vocabulary. Keep it coming, we need more posts like this.


Cheers,
AT

On 7/22/11, Chris Cogdon <ch...@cogdon.org> wrote:
> I think I did my due google diligence (googlence?) on this one, and came up
> short.
>
> I'm trying to pass some ancillary, read-only information along with each
> element in a formset. Ie, Along with the stuff that can be changed by the
> user, I'd like some stuff that can-NOT be changed. Not all, but some, of the
> information needs to be read back during validation.
>
> For example, I have:
>
> class Thingy ( models.Model ):
>       name = model.CharField ()
>
>
> I have a few that selects a few Thingys and will present them to the user
> with a checkbox next to each, so its obvious I want a form:
>
> class CheckThingyForm ( forms.Form ):
>       checked = forms.BooleanForm ()
>
> CheckThingyFormset = formset_factory ( CheckThingyForm, extra=0 )
>
>
> Inside the view, I create a list of the thingies I want to present
>
>       thingies = Thingy.objects.filter ( ... some criteria... )
>
> and now to... somehow... create the initial data for the formset. This is
> where I am stumped. I've tried something like the following:
>
>       thingies_list = []
>       for thingy in thingies:
>               thingies_list.append ( { 'thingy': thingy } )
>
>       formset = CheckThingyFormset ( initial = thingies_list )
>
> And while this presents the correct number of rows, my expectation on being
> able to extract the thingy in the template fails. "form.thingy.name" returns
> nothing
>
> {% for form in formset %}
> <tr><td>{{ form.checked }}</td><td>{{ form.thingy.name }}</td></tr>
> {% endfor %}
>
> If I'm far more explicit about it, by using the following, i still turn up a
> blank
>
> thingies_list.append ( { 'name': thingy.name } )
>
>
> What's the "right" way of passing ancillary data to a formset like this? If
> it was just a single form, then I could very easily just pass the data i
> needed through additional context variables. But since here I want to pass
> some data per form, and dont care about being able to read it back or not,
> it makes sense to try and pass it along WITH the form, and not need it to be
> a field itself to read back.
>
> (What I omitted was needing to pass thingy.id, so I know what thingy I'm
> actually checking when validating the form... obviously I should include
> that in the form or an "add_fields in the formset, and have it as a
> hidden... I could do the same thing with the "name" and just extract the
> value explicitly, but that's really contorted)
>
>
> Thanks for reading this far... I hope someone can help.
>
>
> --
>   ("`-/")_.-'"``-._        Chris Cogdon <ch...@cogdon.org>
>    . . `; -._    )-;-,_`)
>   (v_,)'  _  )`-.\  ``-'
>  _.- _..-_/ / ((.'
> ((,.-'   ((,/   fL
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django developers" group.
> To post to this group, send email to django-developers@googlegroups.com.
> To unsubscribe from this group, send email to
> django-developers+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-developers?hl=en.
>
>

-- 
Sent from my mobile device

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

Reply via email to