如何解决超级用户与普通用户的不同模型字段要求?姜戈
示例(不是真实示例): 我希望超级用户不必注册他们的用户名和电子邮件。 和普通用户保存用户名、电子邮件和号码(unique=True)。
我想使用 django 拥有的用户模型,但我不知道什么时候数字必须是唯一的?或者更确切地说,我最初希望它是主键,但仅适用于普通用户。我是否必须手动创建两个不同的用户类以及权限、身份验证等?或者 django 中的管理员/用户是否有单独的用户模型?
我尝试过(作为一个完全的业余爱好者,oop 和 django 的新手)......在放弃将其用作主键之后,bc AbstractUser 飞起来了。
尝试使用 onetoonefield,但无法使用 UserCreationForm 制作组合表单,bc“字段过多错误”。将用户表的重要部分放在不同的表中也很奇怪(或者是吗?)。 类似(不是 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 是否唯一,但这对数据库来说似乎是一种风险,当它至关重要时,它是唯一的。
感谢您的聆听:) 祝你有美好的一天
解决方法
我是否必须手动创建两个不同的用户类以及权限、身份验证等?或者 django 中的管理员/用户是否有单独的用户模型?
Django 使用内置的 User model 并使用属性 is_staff
和 is_superuser
区分三种类型的用户。
- 普通用户:
is_staff=False
、is_superuser=False
- 员工用户(可以访问管理界面):
is_staff=True
- 超级用户(无所不能):
is_superuser=True
如果默认用户模型不适合您,您可以extend it或replace it。
让用户决定他们的主键并不是预期的默认值。主键通常由数据库决定,数据库也处理唯一性。如果您想为每个用户分配一个唯一编号,例如客户编号,我想最简单的方法是使用用户个人资料extend the user model。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。