如何使用现有的用户模型在Django中定义多种用户类型?

兰维尔

Django有一个很棒的用户模型以及身份验证。使用这个,我想定义多个用户类型,例如学生和教授。我想使用对现有模型的最小改动来做到这一点。

一种方法是用户组。另一个方法是扩展用户模型并存储标志。考虑到两个实体不是完全独立的,并且类型一的成员也可以是类型二的成员,这对于我的问题而言是一种更好的方法。

阿尔瓦罗AV

如果我完全理解您的问题,我的选择是OneToOneField

当我在客户需要自定义用户的项目上工作时,最好的解决方案之一是创建一个新模型,并OneToOneFieldProfile模型一样指向Django用户当您拥有一个User对象时,您可以执行操作,user.profile并获得与用户相关的配置文件(因此您可以执行user.profile.any_profile_field)。

建议您使用这种解决方案,因为它易于管理且可扩展。如果在1个月内需要为用户添加新的属性/字段/值,则使用此解决方案,您只需更改此新模型。

在这里,您可以根据需要将任意多个字段添加到Profile模型,并且易于管理,因为如果您拥有用户,则拥有Profile,反之亦然

class Profile(models.Model):
    USER_TYPE_CHOICES = (
        ('s', 'Student'),
        ('t', 'Teacher' ),
    )
    user = models.OneToOneField(User)
    type_user = models.CharField(max_length=20, default='s',choices=USER_TYPE_CHOICES)

    #     ...    ...     ...
    #      Your fields here

编辑

如果使用此authenticate方法,则您的方法可以保持不变,不正确。

您可以按照以下示例进行操作:

user = User.objects.all()[0]  # Get the first user

user.profile  # This would return the profile object
user.profile.type_user  # This would return the type_user of the profile related with this user

因此,您可以在登录功能中使用配置文件字段,或者在用户访问某些URL时使用它,然后检查用户类型是否允许。

控制仅教师可以输入的模板的示例:

def teacher_view(request):

    if not request.user.is_authenticated:
        # If user is not logged in, send it to login page
    else:
        if request.user.profile.type_user == 's':  # If the user is student
            # Here you can raise an error (not enough permissions), raise an error or redirect

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将用户现有的.ssh目录挂载到Docker容器中?

来自分类Dev

用户如何在Django中查询模型

来自分类Dev

具有Django 1.5,自定义字段和共享身份验证的多种用户类型

来自分类Dev

Django:使用自定义用户模型创建超级用户

来自分类Dev

创建用户角色和权限以扩展现有的用户模型

来自分类Dev

如何在Django中处理多种用户类型

来自分类Dev

如何将社交登录集成到我现有的用户架构/登录系统中?

来自分类Dev

Django 1.8,多种自定义用户类型

来自分类Dev

无法在Django 1.8中创建超级用户使用自定义用户模型

来自分类Dev

如何将弹出式日历表单合并到现有的用户表单中

来自分类Dev

Python-Django 2.2中的多种用户类型实现

来自分类Dev

对多种用户类型使用django-rest-auth注册

来自分类Dev

Django-使用多角色用户和多种需求类型扩展模型

来自分类Dev

在现有的jhipster应用中创建子用户

来自分类Dev

如何在打字稿中理解“属性'名称'在类型'用户'中是私有的”

来自分类Dev

在Django中使用自定义用户模型总是在模板中返回匿名用户

来自分类Dev

如何使用现有的已登录Chrome用户配置文件正确设置VS Code以在Chrome中调试?

来自分类Dev

在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

来自分类Dev

如何为kafka用户使用现有的avro模式?

来自分类Dev

带有Django 1.5,自定义字段和共享身份验证的多种用户类型

来自分类Dev

使用Django的自定义用户模型(Django1.6)

来自分类Dev

如何停止在php中存储现有的用户名和电子邮件?

来自分类Dev

Django 1.6使用现有用户编辑用户配置文件模型

来自分类Dev

创建用户角色和权限以扩展现有的用户模型

来自分类Dev

如何创建现有用户模型的副本-Django管理员

来自分类Dev

如何从Django模型定义中访问用户信息?

来自分类Dev

Django Rest Framework-扩展现有的用户模型并保存

来自分类Dev

使用现有的Devise用户/编辑功能更新自定义用户属性

来自分类Dev

django 如何为 postgresql 数据库中现有的多对多表定义模型

Related 相关文章

  1. 1

    如何将用户现有的.ssh目录挂载到Docker容器中?

  2. 2

    用户如何在Django中查询模型

  3. 3

    具有Django 1.5,自定义字段和共享身份验证的多种用户类型

  4. 4

    Django:使用自定义用户模型创建超级用户

  5. 5

    创建用户角色和权限以扩展现有的用户模型

  6. 6

    如何在Django中处理多种用户类型

  7. 7

    如何将社交登录集成到我现有的用户架构/登录系统中?

  8. 8

    Django 1.8,多种自定义用户类型

  9. 9

    无法在Django 1.8中创建超级用户使用自定义用户模型

  10. 10

    如何将弹出式日历表单合并到现有的用户表单中

  11. 11

    Python-Django 2.2中的多种用户类型实现

  12. 12

    对多种用户类型使用django-rest-auth注册

  13. 13

    Django-使用多角色用户和多种需求类型扩展模型

  14. 14

    在现有的jhipster应用中创建子用户

  15. 15

    如何在打字稿中理解“属性'名称'在类型'用户'中是私有的”

  16. 16

    在Django中使用自定义用户模型总是在模板中返回匿名用户

  17. 17

    如何使用现有的已登录Chrome用户配置文件正确设置VS Code以在Chrome中调试?

  18. 18

    在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

  19. 19

    如何为kafka用户使用现有的avro模式?

  20. 20

    带有Django 1.5,自定义字段和共享身份验证的多种用户类型

  21. 21

    使用Django的自定义用户模型(Django1.6)

  22. 22

    如何停止在php中存储现有的用户名和电子邮件?

  23. 23

    Django 1.6使用现有用户编辑用户配置文件模型

  24. 24

    创建用户角色和权限以扩展现有的用户模型

  25. 25

    如何创建现有用户模型的副本-Django管理员

  26. 26

    如何从Django模型定义中访问用户信息?

  27. 27

    Django Rest Framework-扩展现有的用户模型并保存

  28. 28

    使用现有的Devise用户/编辑功能更新自定义用户属性

  29. 29

    django 如何为 postgresql 数据库中现有的多对多表定义模型

热门标签

归档