关于django'的问题;s用户API(用户id)
我正在看Django的内置用户实现,有几个问题关于django'的问题;s用户API(用户id),django,concurrency,Django,Concurrency,我正在看Django的内置用户实现,有几个问题 识别用户的正确方法是什么?用户名是唯一的-因此可以作为标识符,但它们很容易更改(u.Username='somethingelse',u.save()。谷歌搜索发现一个id字段,但为什么文档中没有这个字段(一个错误,或者我不应该使用它?) 如何使用户id自动递增?在文档的某个地方,它建议不要删除用户,但我喜欢让用户删除他们的信息,如果他们愿意的话。我选中了-删除用户时,用户id被释放 Django如何实现并发性?关于如何使您自己的查询成为并发的证明
id
字段,但为什么文档中没有这个字段(一个错误,或者我不应该使用它?)你从错误的地方出发。如果您想知道Django模型是如何工作的,您应该阅读教程和模型文档,而不是身份验证文档,这自然会遗漏所有不特定于用户模型的内容。每个Django模型都有一个自动递增的id字段,如这些模型文档中所述 我怀疑文档中是否规定你不应该删除用户。而且我不明白当用户被删除时,现在有一个“免费”id的相关性。该ID当然不会被重用,因为db autoincrement已继续。这是RDBMS工作原理的基础 并发和事务自然包含在事务文档中 编辑 我对Daniel的答案进行了编辑,其中包括了一些他没有回答的问题(但在阅读了一般django模型文档后,他说我学到了很多东西——没有意识到django的用户只是基于其模型API构建的)
select。。。用于查询时更新
。
。看啊,我再也找不到链接了,但我确实在文档(官方或django书籍,它们都是绿色主题)中读到了一些建议,建议将用户设置为非活动状态,而不是删除它们,以维护外键,这正是我担心维护数据完整性的原因。此外,当我删除一个用户时,至少在我刚才尝试删除时,ID会被重新使用(问题中的示例)。我将查看通用模型文档-感谢您的指点。很明显,您的数据库设置有一些非常奇怪的地方。出于数据库完整性的明显原因,这绝对不应该发生。id字段是一个自动增量字段,设置新值由数据库负责,而不是Django。实际上,我刚刚意识到,您可能正在使用SQLite作为数据库,它可以重用已删除的id。如果这是一个问题,您可能应该使用一个合适的数据库,比如PostgreSQL,尤其是在部署时,您几乎肯定会这样做。啊,是的,我昨天也意识到了这一点(但没有机会更新这个问题)(我正在使用sqlite进行开发-只是玩玩而已)。然而,我认为sqlite会保持自动递增,如果您执行
整型主键自动递增
它不会重用ID吗?或者这不是django内置的(它不会为sqlite生成主键自动增量,因此不会重用键)。我正在对模型做更多的研究,如果这能回答我的问题,我会接受这个答案
userA = User.objects.create_user('userA')
userA.id # (prints 2 for example)
# I go to the admin page, I see the new user
userA.delete()
# Admin page, userA gone
userB = User.objects.create_user('userB')
userB.id # (prints 2 again)
# UserB is visible in the admin page