超级用户与普通用户的不同模型字段要求?姜戈

Different model field requirements for superuser vs normal user? django

示例(非真实示例): 我希望超级用户必须在注册他们的用户名和电子邮件时保存。 和普通用户保存用户名、电子邮件和号码(unique=True)。

我想使用 django 拥有的用户模型,但我不知道数字何时必须是唯一的?或者更确切地说,我最初希望它成为主键,但仅适用于普通用户。我是否必须手动创建两个不同的用户 类 以及权限、身份验证等?还是 django 中 admin/user 有单独的用户模型?


我尝试过(作为一个完全的业余爱好者,oop 和 django 的新手)...在放弃将它用作主键之后,bc AbstractUser 是 fly。

尝试使用 onetoonefield,但无法使用 UserCreationForm 制作组合表单,因为出现“太多字段错误”。让用户 table 的重要部分处于不同的 table 中也很奇怪(或者是吗?)。 类似(不是 100% 准确):

#in models.py
class AdminUser(AbstractUser):
  username
  email

class NormalUser():
   ontoonefield(AdminUser)
   number(unique=True)

#in forms.py
class NormalUserForm(UserCreationForm):
  class meta:
    fields

class onetoonefieldForm(NormalUserForm):
   class meta:
     add_field += (number)

尝试使用 required_fields,但同样……号码是唯一的

尝试创建两个 abstractUsers...权限错误

考虑过让它成为非唯一的,然后检查 db insert 它是唯一的,但这似乎对数据库有风险,当它是唯一的至关重要时。

感谢您的收听:) 祝你有美好的一天

Do I have to manually make two different user classes along with the permissions, authentication etc.? or is there separate user models for admin/user in django?

Django 使用内置的 User model 并使用属性 is_staffis_superuser.

区分三类用户
  1. 普通用户:is_staff=Falseis_superuser=False
  2. 职员用户(可以访问管理界面):is_staff=True
  3. 超级用户(无所不能):is_superuser=True

如果默认用户模型不适合您,您可以extend it or replace it

让用户决定他们的主键并不是预期的默认值。主键通常由数据库决定,数据库也处理唯一性。如果您想为每个用户分配一个唯一的编号,例如客户编号,我想最简单的方法是 extend the user model 使用用户配置文件。