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)
# 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)
пожалуйста, руководство меня. Спасибо.
2 ответов
request.user
по умолчанию имеет тип SimpleLazyObject
. Чтобы разрешить его,
bookmark, created = Bookmark.objects.get_or_create(
user = request.user,
link = link
)
должно быть
bookmark, created = Bookmark.objects.get_or_create(
user = request.user.id,
link = link
)
если это не решает его, убедитесь, что вы вошли в систему.
есть еще один вариант, возможно это решение поможет вам это исправить.
from django.contrib import auth
bookmark, created = Bookmark.objects.get_or_create(
user = auth.get_user(request),
link = link
)