int()参数必须是字符串或数字,而不是“SimpleLazyObject” [英] int() argument must be a string or a number, not 'SimpleLazyObject'

查看:189
本文介绍了int()参数必须是字符串或数字,而不是“SimpleLazyObject”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


/ save / int()参数中的TypeError必须是字符串或数字,而不是
'SimpleLazyObject'


执行以下窗体时






views.py

  def bookmark_save_page(request):
如果请求.method =='POST':
form = BookmarkSaveForm(request.POST)
如果form.is_valid():
#创建或获取链接
link,dummy = Link。 object.get_or_create(
url = form.cleaned_data ['url']

#创建或获取书签
书签,已创建= Bookmark.objects.get_or_create(
user = request.user,
link = link

#更新书签标题
bookmarks.title = form.cleaned_data ['title']
#i f书签正在更新,清除旧标签列表。
如果没有创建:
bookmark.tag_set.clear()
#创建新的标签列表
tag_names = form.cleaned_data ['tags']。split()
对于tag_names中的tag_name:
标签,dummy = Tag.objects.get_or_create(name = tag_name)
bookmark.tag_set.add(tag)
#将书签保存到数据库。
bookmark.save()
return HttpResponseRedirect(
'/ user /%s /'%request.user.username

else:
form = BookmarkSaveForm()
variables = RequestContext(request,{
'form':form
})
返回render_to_response('bookmark_save.html',变量)






我以为我有错误,因为我传递了

 书签,已创建= Bookmark.objects.get_or_create(
user = request.user,
link = link

但是我不知道如何解决它。
我如何解决?

解决方案

可能的原因是你设置 user = request.user ,其中request.user不是真正的User对象,而是SimpleLazyObject实例。请参阅 django:django.utils.functional.SimpleLazyObject的目的? / a>有关更多详细信息,但使用 request.user.id 应该可以解决您的问题。


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?

解决方案

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.

这篇关于int()参数必须是字符串或数字,而不是“SimpleLazyObject”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆