相关疑难解决方法(0)

django:django.utils.functional.SimpleLazyObject的目的?

我遇到了一个问题,我分配request.user了一个名为的变量prior_user,然后基本上验证了用户,然后检查是否request.user != prior_user.我希望它们不一样,并且prior_user应该包含`AnonymousUser.令我惊讶的是,他们是一样的.

示例代码:

prior_user = request.user   # request object, obtained froma  view
authenticate_user(request)   # some function that authenticates
print prior_user.username != request.user.username   # returns False i.e.they are the same!
Run Code Online (Sandbox Code Playgroud)

然后我发现prior_user实际上包含一个django.utils.functional.SimpleLazyObject的实例,所以我假设它是某种懒惰的查找类型的东西,即在实际使用之前不会查找prior_user的值.看一下源代码,我无法证实这一点.

有django经验的人可以告诉我发生了什么以及为什么需要它?

这让我有点动摇,因为通常的赋值语句不能按我预期的方式工作,Django中的其他内容是什么样的呢?我也没有在文档中看到这一点.

那么对django有超人类知识的人可以提供一些清晰度吗?

django django-views

44
推荐指数
1
解决办法
2万
查看次数

Django SimpleLazyObject

当我尝试提交时,我得到一个TypeError:

int()参数必须是字符串或数字,而不是'SimpleLazyObject'

我的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) …
Run Code Online (Sandbox Code Playgroud)

python django django-templates django-views

6
推荐指数
1
解决办法
8908
查看次数

标签 统计

django ×2

django-views ×2

django-templates ×1

python ×1