On Fri, 2009-09-18 at 06:53 -0700, Daniel Roseman wrote:
> On Sep 18, 1:01 pm, Tom Evans <[email protected]> wrote:
> > Hi all. I have a model form to update two attributes on a UserProfile.
> >
> > The form is simple:
> >
> > class UserProfileSetRememberMeForm(forms.ModelForm):
> >   DURATION_CHOICES = (
> >       (  0, 'Default (2 weeks)'),
> >       (  1 * 7 * 24 * 60 * 60, '1 week'),
> >     )
> >   YESNO_CHOICES = ( (0, 'No'), (1, 'Yes'), )
> >   remember_me_duration = forms.TypedChoiceField(choices=DURATION_CHOICES,
> >                                                 required=False,
> >                                                 coerce=smart_int)
> >   remember_me = forms.ChoiceField(choices=YESNO_CHOICES, required=False)
> >
> >   def __init__(self, *args, **kwargs):
> >     super(forms.ModelForm, self).__init__(*args, **kwargs)
> >     attrs = { 'class': 'remember_me', }
> >     self.fields['remember_me'].widget.attrs = dict(attrs)
> >     if 'instance' in kwargs and not kwargs['instance'].remember_me:
> >       attrs['disabled'] = 'disabled'
> >     self.fields['remember_me_duration'].widget.attrs = dict(attrs)
> >
> >   class Meta:
> >     model = UserProfile
> >     fields = ( 'remember_me', 'remember_me_duration' )
> >
> > The two fields are defined like so:
> >   remember_me = models.BooleanField()
> >   remember_me_duration = models.IntegerField(default=0)
> >
> > The view is similarly simple:
> >
> > def update_user_remember_me(request, user_id=None):
> >   user = get_object_or_404(User, id=user_id)
> >   prof = user.get_profile()
> >   print "current: pk: %d  remember_me: %s  duration: %d" \
> >       % (prof.pk, prof.remember_me, prof.remember_me_duration)
> >   json = { 'valid': False }
> >   if request.method == 'POST':
> >     frm = UserProfileSetRememberMeForm(request.POST, instance=prof)
> >     if frm.is_valid():
> >       p2 = frm.save(commit=False)
> >       print "to save: pk: %d  remember_me: %s  duration: %d" \
> >           % (prof.pk, prof.remember_me, prof.remember_me_duration)
> >       p2.save()
> >       prof = UserProfile.objects.get(pk=prof.pk)
> >       print "from db: pk: %d  remember_me: %s  duration: %d" \
> >           % (prof.pk, prof.remember_me, prof.remember_me_duration)
> >       json['enabled'] = prof.remember_me == 1
> >       json['valid'] = True
> >   return JsonResponse(json)
> >
> > The debug output shows that (as far as I can see), the model should be
> > saved and the DB updated:
> >
> > current: pk: 1  remember_me: 1  duration: 0
> > to save: pk: 1  remember_me: 0  duration: 0
> > from db: pk: 1  remember_me: 1  duration: 0
> >
> > However, as you can see, it is not updated. Calling
> > 'p2.save(force_update=True)' results in a 'Database error: Forced update
> > did not affect any rows' exception.
> >
> > Any ideas? This is flummoxing me :/
> >
> > Cheers
> >
> > Tom
> 
> I don't think that code can be producing the output you give. The line
> where you print the 'to save' information is getting it from the
> original 'prof' object, not the new 'p2' object from form.save(), so
> the output should be the same.
> 
> Can you post the actual code that you're running?
> --
> DR.

Yep, I noticed that shortly after sending it. The output is the same if
I change the 'to save' line to print out from p2 rather than prof.

I'm trying to trace it through pdb, but its slow going. I think it might
be related to type coercions..

Here is the exact code I'm running at the moment in the view, and the
output it generates. I thought to have a look at connection.queries, but
it never issues one, so that isn't very interesting either :/

def update_user_remember_me(request, user_id=None):
  from django.db import connection
  connection.queries=[]
  user = get_object_or_404(User, id=user_id)
  prof = user.get_profile()
  print "current: pk: %d  remember_me: %s  duration: %d" \
      % (prof.pk, prof.remember_me, prof.remember_me_duration)
  json = { 'valid': False }
  if request.method == 'POST':
    frm = UserProfileSetRememberMeForm(request.POST, instance=prof)
    if frm.is_valid():
      p2 = frm.save(commit=False)
      p2.save()
      print "to save: pk: %d  remember_me: %s  duration: %d" \
          % (p2.pk, p2.remember_me, p2.remember_me_duration)
      prof = UserProfile.objects.get(pk=prof.pk)
      print "from db: pk: %d  remember_me: %s  duration: %d" \
          % (prof.pk, prof.remember_me, prof.remember_me_duration)
      print connection.queries
      json['enabled'] = prof.remember_me == 1
      json['valid'] = True
  return JsonResponse(json)


current: pk: 1  remember_me: 1  duration: 0
to save: pk: 1  remember_me: 0  duration: 0
from db: pk: 1  remember_me: 1  duration: 0
[]


Cheers

Tom


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to