我遇到了一个问题,我分配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有超人类知识的人可以提供一些清晰度吗?
当我尝试提交时,我得到一个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)