Django - 改变用户角色的惯用法

时间:2016-11-04 03:41:04

标签: python django orm

我们的团队正在构建一个需要在用户子类之间轻松切换的应用。每个用户角色都有不同的字段,因此它们不需要继承,但每个User实例都应该附加到其中一个子字段。

转换这些角色的最惯用方法是什么?我们是否应该首先使用子类?

我看过这些页面: Convert a subclass model instance to another subclass model instance in django? Change class of child on django models

我们是预先制定的,因此如果有更好的方法,那么就可以改变架构,与这两个例子不同。

1 个答案:

答案 0 :(得分:0)

如果您可以使用自定义用户模型,则可以使用GenericForeignKey来实现此目的。

您可以拥有一个具有共同属性/行为的用户模型和多个实现与这些角色关联的行为的模型。因此,如果您需要更改用户的所述角色,您可以删除一个模型的旧相关实例并创建另一个模型的实例。

class CustomUser(AbstractUser):
    role_ct = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    role_id = models.PositiveIntegerField()
    role = GenericForeignKey

class Role1(models.Model):
    """Some stuff here"""

class Role2(models.Model):
    """Some other stuff here"""

但是,请注意警告:GenericForeignKeys可能会稍微慢一些,但操作起来会稍微困难。

如果对您的案例来说这似乎有点过分,您可以按照cutteeth的建议使用django管理员权限。