Hi all,
Thanks for every ones help on this. I have a fix now which is working
well.
from django.forms.models import model_to_dict
values = model_to_dict(model_instance)
for k, v in request.POST.copy().items():
values[k] = v
form = FooForm(data = values, instance = model_instance)
model_instance = form.save()
My earlier thoughts that model_to_dict wasn't returning the correct
data types was wrong. In fact model_to_dict works fine and looking at
the ticker here http://code.djangoproject.com/ticket/5126 it seems was
created for this exact purpose.
The next issue was updating the model dictionary with the POST values
which, as has been said, are not a real dictionary. Seems I could just
do values.update(request.POST) as it messed the dictionary up. So
instead I did the for loop which is pretty much what I thought
dictionary.update did.
That then all works just fine.
Thanks again.
- Tom
On Feb 16, 10:35 pm, "[email protected]" <[email protected]>
wrote:
> > values = model_to_dict(instance)
> > values.update(request.POST)
>
> > It then fails on form.is_valid() because it's trying to match a date
> > string in a date value that is actually a list with one value in it
> > instead of a date string!
>
> I can see two problems here. Firstly, the post "dictionary" isn't a
> real dictionary. In a post string there can be two values to one key,
> eg "foo=1,bar=2,foo=3". When you cast the post "dictionary" to a real
> python dictionary it will be represented as:
> {'foo': [1, 3,], 'bar': [2,]}
>
> So thats why your model instance ends up with lists in it.
>
> The second thing is that if a date is in the post dictionary, it will
> still be a string. When you update your model dictionary you never
> cast it into a python datetime object which is what would be expected.
>
> What I think you want to do is something like this:
>
> form = FooForm(instance=model_instance, data=request.POST)
> model_instance = form,save(commit=False)
>
> Peter
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected].
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.