我们的团队正在构建一个需要在用户子类之间轻松切换的应用。每个用户角色都有不同的字段,因此它们不需要继承,但每个User实例都应该附加到其中一个子字段。
转换这些角色的最惯用方法是什么?我们是否应该首先使用子类?
我看过这些页面: Convert a subclass model instance to another subclass model instance in django? Change class of child on django models
我们是预先制定的,因此如果有更好的方法,那么就可以改变架构,与这两个例子不同。
答案 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管理员权限。