如何从 django 中的用户模型中获取 id

Posted

技术标签:

【中文标题】如何从 django 中的用户模型中获取 id【英文标题】:How to get id from User model in django 【发布时间】:2015-12-22 14:01:22 【问题描述】:

我有以下代码:

user=User.objects.get(username=uid)

我通过 url "/profile/showprofile/post.author" 传递 uid 的值。我的 post.author 包含值为“dean88”。

运行表单并单击带有上述网址的链接。我收到一条错误消息,提示 invalid literal for int with base 10 "dean88"

但是当我去 python shell 并给出: user=User.objects.get(username='dean88') 我仍然得到同样的错误。仅当我将用户的 id 输入为整数时,该错误才会出现。比如,user=User.objects.get(username=2)。

可能是什么问题以及如何避免?

【问题讨论】:

你指的User是django默认的User模型吗? 是的。指的是django的User模型 dean88 看起来不像一个 id,它是一个整数。尝试将其更改为 post.author.id 在进一步阅读您的 OP 两次之后,我认为您一定是创建了用户,为 .username 属性分配了错误的值(即,用户是用 2 创建的,而不是 dean88用户名。您可以通过管理界面查看,或者直接通过数据库数据上的pgadmin 更好) 【参考方案1】:

您当前正在为您的 url kwarg 获得一个“dean88”值,因为您将 post.author 的字符串表示形式传递给它,即用户名。 请改用“/profile/showprofile/post.author.pk”来传递实际的用户 ID。

【讨论】:

这也是我的假设(见我上面的评论)。但是,它没有解释为什么user=User.objects.get(username='dean88') 会抛出错误,而user=User.objects.get(username=2) 可以工作。 @Pynchia.. 代码 user=User.objects.get(username=2) 在我的 shell 中不起作用。它抛出一个错误说“Object_name 不存在。用户匹配查询不存在” 你是对的!我们需要查看更多代码才能弄清楚。 对不起,那我一定是误会了,我觉得你的帖子少了away这个词。好吧,就像我和@suselrd 最初假设的那样,一切都解决了,对吧? @suselrd.. 顺便说一下“/profile/showprofile/post.author.pk”这不会返回任何值。仅当使用“/profile/showprofile/post.author.id”时,它才会将 id 返回给 views.py。不知道为什么。对此有任何想法。【参考方案2】:
>>> from django.contrib.auth.models import User
>>> user = User.objects.filter(username='paolocooper12').first()
>>> print(user)
>>> print(user.id)

这就是你在 python manage.py shell 中的做法

【讨论】:

以上是关于如何从 django 中的用户模型中获取 id的主要内容,如果未能解决你的问题,请参考以下文章

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

如何从 django 模板中的 for 循环中获取特定的 id?

Django RESTful Framework 如何从 HTTP 标头的令牌中获取用户模型?

如何从列表中的 django 模型中获取选择字段?

如何从 django 的表单中获取数据?

如何从中间件中的 Django 请求对象获取视图中使用的模型名称?