【问题标题】:Getting User object from username in django从 django 中的用户名获取用户对象
【发布时间】:2014-07-26 10:34:12
【问题描述】:

我正在 django celery 任务中尝试以下代码

@app.task
def search(q, userstring):
    uid = User.objects.get(username=userstring)
    messages.info(uid, 'Initiating search in background.')
    [...]

我的观点是这样称呼的:

search.delay(self.request.user.get_username(), form.instance.query)

我收到以下错误:

>[2014-06-05 12:04:04,352: ERROR/MainProcess] Task listthings.tasks.search[5aaa77b4-c7be-4d6a-9127-626e63d0dfbe] raised unexpected: DoesNotExist('User matching query does not >exist.',)
Traceback (most recent call last):
  File "/webapps/wcw/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/webapps/wcw/local/lib/python2.7/site-packages/celery/app/trace.py", line 437, in __protected_call__
    return self.run(*args, **kwargs)
  __File "/webapps/wcw/webcamwatch/listcams/tasks.py", line 44, in search
    uid = User.objects.get(username=userstring)__
  File "/webapps/wcw/local/lib/python2.7/site-packages/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "/webapps/wcw/local/lib/python2.7/site-packages/django/db/models/query.py", line 310, in get
    self.model._meta.object_name)
Exception: User matching query does not exist.

我想要实现的是将活动用户从视图传递到django-aync-messages

任何关于我的错误的建议或指示(包括更好的方法!)非常感谢。

【问题讨论】:

  • 看起来没有用户名为:'userstring'。你确定用户字符串的值正确吗?

标签: python django python-2.7 celery


【解决方案1】:

您查询用户的方式没有任何问题。您的代码的问题是您以错误的顺序传递了变量:任务期待(q, userstring),但您传递的是(username, query)

但是,我想知道为什么您可以简单地传递 User 实例的主键,但为什么要查询用户名:

def search(q, user_id):
    uid = User.objects.get(pk=user_id)

然后调用它:

search.delay(form.instance.query, self.request.user.pk)

【讨论】:

  • 丹尼尔,非常感谢你——你说的完全正确。哦,男孩是我的脸红:)
【解决方案2】:

你需要以某种方式处理没有用户的情况,例如:

@app.task
def search(q, userstring):
    try:
        uid = User.objects.get(username=userstring)
    except DoesNotExist, e:
        return None

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 2021-01-09
    • 2020-12-16
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多