When the IntegrityError is thrown, the debug package stated that
"songs_rating.user_id may not be NULL". It is indeed being thrown by
get_or_create(). Strangely enough, request.user.id contains the
correct value of the logged in user's ID, so I don't know what the
problem is. I did manage to get the view working by swapping out the
following for line 6:

    rating = Rating.objects.get_or_create(user=request.user, song=song)
[0]

Now, it matches against the request.user and song objects directly, as
opposed to their IDs as primary keys. I don't know what sort of effect
this has on the efficiency of the underlying DB hit, but it seems the
best I can do for now.

--B


On Aug 21, 12:20 am, "Karen Tracey" <[EMAIL PROTECTED]> wrote:
> On Wed, Aug 20, 2008 at 5:13 PM, Burr Settles <[EMAIL PROTECTED]> wrote:
>
> > I recently came back to a project I put on hold for a couple weeks,
> > and after updating the Django trunk, all my references to
> > "request.user.id" are broken. Here is an example view for a rating
> > widget:
>
> > 1 @login_required
> > 2 def rate(request, song_id):
> > 3     song = get_object_or_404(Song, pk=song_id)
> > 4     if 'rating' not in request.GET or request.GET['rating'] not in
> > range(1,5):
> > 5         HttpResponseRedirect(song.get_absolute_url())
> > 6     rating = Rating.objects.get_or_create(user__pk=request.user.id,
> > song__pk=song.id)
> > 7     rating.rating = int(request.GET['rating'])
> > 8     rating.save()
> > 9     return HttpResponseRedirect(song.get_absolute_url())
>
> > This throws an "IntegrityError" if the user is logged in, presumably
> > complaining that request.user.id is NULL (at line 6).
>
> Presumably?  I suspect you are guessing wrong here, but it would be best to
> make sure.  There's lots of information available on the deubg page when
> something like an IntegrityError is thrown, have you checked the values of
> local variables to see what request.user.id actually is?
>
> > But it passes
> > the @login_required constraint just fine. I'm having similar problems
> > with other views that use request.user.
>
> > Does anyone know if the user API has recently changed? I've scoured
> > the latest online documentation, and can't seem to find any alternate
> > way to access the ID of the currently logged in user. Any help is
> > appreciated.
>
> I do not think anything has changed with request.user.  It seems more likely
> something is going wrong in get_or_create.  Such as the get fails to find an
> existing record so it tries to insert one but that is violating an integrity
> constraint.   What, exactly, does the IntegrityError message say?  Usually
> it will give some indication of what it is objecting to, which could provide
> a clue.
>
> Karen
--~--~---------~--~----~------------~-------~--~----~
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