【问题标题】:Django - Idiomatic way to change user rolesDjango - 更改用户角色的惯用方式
【发布时间】:2017-03-17 19:55:10
【问题描述】:

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

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

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

我们是前期产品,因此如果有更好的方法,我们愿意更改架构,这与这两个示例不同。

【问题讨论】:

  • 你为什么不使用django自己的permissions框架,它可以让你创建一个组和assign permissions to groups,然后将一个用户添加到组中,该用户可以对模型有权限,你可以使用检查权限permission_requited 装饰器还是 mixin?
  • 权限并不是唯一不同的东西。一个子类中的某些组件不会出现在其他子类中,它们将这些子类链接到模式中的特定表。看来这不能解决我们的问题。

标签: python django orm


【解决方案1】:

如果您可以使用自定义用户模型,您可以使用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 管理员权限。

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 2016-03-16
    • 2017-08-10
    • 2012-08-23
    • 2014-07-24
    • 1970-01-01
    • 2021-05-09
    • 2021-07-11
    • 2014-07-05
    相关资源
    最近更新 更多