我想在Django创建多个用户.我想知道哪种方法最好.

class Teachers(models.Model):
    user = models.ForeignKey(User)
    is_teacher = models.BooleanField(default=True)
    .......

或者我应该用...

class Teacher(User):
    is_teacher = models.BooleanField(default=True)
    .......

或者我必须定制用户模型... 哪一项适合创建多类型用户.??

推荐答案

Django没有多个用户——它只有一个用户,然后根据权限用户可以做不同的事情.

因此,首先-Django中只有一种用户类型.如果使用默认身份验证框架,则此用户的模型称为User,从django.contrib.auth.models开始.

如果您想在Django中自定义用户行为,您可以做三件事:

  1. Customize how you authenticate them美元.默认情况下,使用存储密码的数据库进行身份验证.您可以针对Facebook/Google等进行身份验证,也可以针对现有的用户数据库进行身份验证-例如,如果您在Windows网络上,则可以使用ActiveDirectory进行身份验证.

  2. Create custom permissions,并根据这些权限限制用户可以执行的功能.默认情况下,在每个模型上,django将添加基本权限"可以编辑"、"可以删除"、"可以阅读".您可以创建自己的,然后判断用户是否具有这些特定权限.

  3. 您可以存储有关用户的额外信息,以及Django通常存储的任何信息.有两种方法可以做到这一点,具体取决于您需要多少自定义.如果默认情况下Django提供的所有内容都对您有效,而您想要做的只是存储有关用户的额外信息,那么您可以extend the user model-在以前的版本中,这称为创建自定义配置文件.如果您想要更深层次的自定义,另一个选项是设置为create your own User model.自定义用户模型最常见的用法是,如果您要使用邮箱地址作为用户名.

你不必同时做这三件事,事实上,有时候你只需要存储一些额外的信息,或者让他们使用他们的邮箱地址进行身份验证;在某些应用程序中,必须修改所有三个位置.

在您的情况下,因为您只想存储关于用户的extra information,所以您需要创建一个引用User的模型(注意:您不从User继承):

class Profile(models.Model):
    user = models.OneToOneField(User)
    department = models.CharField(max_length=200, default='Computer Science')
    is_teacher = models.BooleanField(default=False)
    is_student = models.BooleanField(default=True)
    # .. etc. etc.

Django相关问答推荐

Django Model邮箱字段是必需的,即使在我将其设置为NULL=True和BLACK=True之后也是如此

未显示SWAGER上的一些示例架构

其中实际的数据库提取在DRF list()中完成

在 django 中使用自定义 url 转换器传递 url 参数

防止 Django 从表单集中保存特定表单

在 django HTML 邮箱模板中使用字体

组织大型 Django 元素的指南

Django模型中的密码字段

多租户 Django 应用程序:根据请求更改数据库连接?

Django:通过manage.py使用服务器和gunicorn等其他服务器之间的区别.哪个更好?

如何在 django 中生成 url

Django 从字段开始

使用 XMLHttpRequest 提示下载文件

如何在 Django 中向 ChoiceField 添加class?

有 Django List View 模型排序吗?

PyCharm 代码判断提示找不到模板文件,如何解决?

Django - 在设置中使用反向 url 映射

django sql 查询如何使用不区分大小写的同时包含?

它是如何工作的,Django INSTALLED_APPS 的命名约定?

确保只有一个工作人员在运行多个工作人员的 pyramid 网络应用程序中启动 apscheduler 事件