【问题标题】:how to make username unique only amongst active users如何使用户名仅在活跃用户中唯一
【发布时间】:2021-06-15 12:33:37
【问题描述】:

我想确保用户名字段是唯一的,但仅限于活跃用户。如果用户处于非活动状态,则他们的用户名可用于创建新帐户。这在django中可能吗?顺便说一句,我正在使用 MySQL。

我已经阅读了条件唯一约束,但它只适用于 postgres。 https://docs.djangoproject.com/en/3.2/ref/models/constraints/#condition

【问题讨论】:

  • 这在 MySQL 8.0 iirc 之后也是可能的。
  • 我正在考虑将来切换数据库,所以我不希望解决方案是特定于数据库的。谢谢!

标签: django django-authentication


【解决方案1】:

在您的 mysql 数据库中,您可以在两列上创建唯一约束,这样用户就不是唯一的,而是值 isActive 和用户名之间的组合。

使用

ALTER TABLE `table_name` ADD UNIQUE `unique_index`(`user`, `isActive`);

这样您就可以同时拥有一个活跃和不活跃的用户名。

【讨论】:

    【解决方案2】:

    有两种可能:

    • 编写自定义用户模型,您可以在其中检查用户名在活跃用户中是否唯一(推荐)
    • 不允许用户名以_inactive_<int> 结尾。当用户被标记为不活动时,在用户名后面附加_inactive_<int> 如果用户名已经不活动并且相同的用户名变为不活动,则使用整数。为了获取用户名,_inactive_<int> 被丢弃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多