Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

int() argument must be a string or a number, not 'SimpleLazyObject'

I got, following Error messages,

TypeError at /save/ int() argument must be a string or a number, not 'SimpleLazyObject'

While executing following form.


views.py

def bookmark_save_page(request):
    if request.method == 'POST':
        form = BookmarkSaveForm(request.POST)
        if form.is_valid():
            # create or get link
            link, dummy = Link.objects.get_or_create(
                    url = form.cleaned_data['url']
                    )
            # create or get bookmark
            bookmark, created = Bookmark.objects.get_or_create(
                    user=request.user,
                    link=link
                    )
            # update bookmarks title
            bookmarks.title = form.cleaned_data['title']
            # if the bookmark is being updated, clear old tag list.
            if not created:
                bookmark.tag_set.clear()
            # create new tag list
            tag_names = form.cleaned_data['tags'].split()
            for tag_name in tag_names:
                tag, dummy = Tag.objects.get_or_create(name=tag_name)
                bookmark.tag_set.add(tag)
            # save bookmark to database.
            bookmark.save()
            return HttpResponseRedirect(
                    '/user/%s/' % request.user.username
                    )
    else:
        form = BookmarkSaveForm()
    variables = RequestContext(request, {
        'form': form
    })
    return render_to_response('bookmark_save.html', variables)

I thought I got error because I passed link at

bookmark, created = Bookmark.objects.get_or_create(
                    user=request.user,
                    link=link
                    )

But I can not figure out how to fix it. How can I fix it?

like image 832
yup Avatar asked Apr 08 '13 12:04

yup


3 Answers

The likely cause is that you're setting user = request.user, where request.user is not a real User object, but a SimpleLazyObject instance. See django: Purpose of django.utils.functional.SimpleLazyObject? for more details, but using request.user.id should fix your issue.

like image 165
Martin B. Avatar answered Sep 18 '22 19:09

Martin B.


You have to login when running this piece of code on localhost. Otherwise the request.user will be a SimpleLazyObject, then the errors comes out.

like image 26
fmx Avatar answered Sep 19 '22 19:09

fmx


Here you trying to create a Bookmark object based on request.user , but request.user is a SimpleLazyObject , so we can get a more secure user object by :

from django.contrib import auth

current_user = auth.get_user(request)

and further your query should be

bookmark, created = Bookmark.objects.get_or_create(
                    user=current_user,
                    link=link
                    )
like image 24
Vidya Sagar Avatar answered Sep 19 '22 19:09

Vidya Sagar