【问题标题】:Django: Filtering drafts by user causes errorDjango:按用户过滤草稿会导致错误
【发布时间】:2012-08-09 01:58:34
【问题描述】:

我正在尝试使用 request.user 变量过滤数据库中的一组草稿对象。他们是出于某种原因,我得到了下面列出的错误。如何修复此错误?

功能:

def posting_draft(request):
    user = request.user
    user_drafts = Draft.objects.filter(user = user)
    drafts = dict()
    for d in user_drafts:
        drafts[d.title] = d.id
    return render_to_response('posting_draft.html', {'STATIC_URL':STATIC_URL, 'draft_l' : drafts})

错误:

int() argument must be a string or a number, not 'SimpleLazyObject'

【问题讨论】:

  • 如果您包含其余的回溯,将会很有帮助。

标签: python django


【解决方案1】:

因为 request.user 在被访问之前是一个SimpleLazyObject。尝试将您的查询更改为以下内容:

user_drafts = Draft.objects.filter(user = user.pk)

【讨论】:

  • 您能解释一下 .pk 的作用吗?
  • 它与user.id 相同,但即使您将不同的字段设置为primary_key 也可以使用。当您调用它时,它将强制填充SimpleLazyObject。这样做是为了只在您真正需要时才从数据库中获取数据,因为数据库查找相对昂贵。
【解决方案2】:

问题出在一行:

user = request.user

阅读这篇文章了解更多详情 request.user returns a SimpleLazyObject, how do I "wake" it?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多