Django SimpleLazyObject

When I try to send, I get a TypeError:

Argument

int () should be a string or a number, not a "SimpleLazyObject"

My 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 bookmarks. bookmark, created = Bookmark.objects.get_or_create( user = request.user, link = link ) # Update bookmark title. bookmark.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) 

Please help me. Thanks.

+6
source share
2 answers

request.user , by default is of type SimpleLazyObject . To solve this problem,

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

it should be

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

If this does not solve the problem, make sure you are logged in.

+12
source

There is another option, maybe this solution will help you fix it.

 from django.contrib import auth bookmark, created = Bookmark.objects.get_or_create( user = auth.get_user(request), link = link ) 
+1
source

Source: https://habr.com/ru/post/949340/


All Articles