Django - Python - 在自定义用户模型中使用BooleanField的多种用户类型& OneToOne关系

时间:2017-02-15 22:03:03

标签: python django authentication model

我正在构建一个Web应用程序,它将允许两种不同类型的用户登录,每个用户组都可以访问该站点上的不同页面。

由于收集的信息类似于每种类型的用户,我计划只使用一个自定义用户模型,每个用户类型有两个布尔字段。该模型将定义如下:

class My_Users(AbstractBaseUser):
...
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_typeA = models.BooleanField(default=False)
is_typeB = models.BooleanField(default=False)

...

对于typeA和typeB用户,我打算在其他模型中使用基于用户ID的OneToOne字段。例如,可能有:

class Model1(models.Model):
    id = models.OneToOneField(TypeA, on_delete=models.CASCADE,  primary_key=True,)
    ...

class Model2(models.Model):
    id = models.OneToOneField(TypeB, on_delete=models.CASCADE,  primary_key=True,)
    ...

我的问题如下:

1 /这意味着我的用户模型中创建的一些ID将是typeA,而其他一些将是typeB。这对于一对一的依赖会是一个问题吗?即,这是一个问题,ids不是增量的(类型A可能是id 1,3,4,5等......而类型B可能有id,6,7等等...)一对一的关系。

2 /这是最好的设置,以确保应用程序可扩展。如果没有,那会是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 不,这对于一对一的关系来说不是问题。如this SO answer中所述,OneToOne只是一个ForeignKey,唯一= True,反向关系是单数。

  2. 根据用户类型以及您可以通过"可扩展"来表示您如何分割应用程序,这将会有所帮助。 Django的Groups and permissions是一个更通用的解决方案,每个用户组都可以访问网站上的不同页面,然后您可以在创建对象时检查组成员身份太