【发布时间】:2021-04-04 16:55:50
【问题描述】:
我计划为两个不同的用户使用相同的用户模型,并在一个模型中添加一些附加字段。有可能在 Django 中做到这一点吗?如果可以,我该怎么做?
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读How to Ask。为什么不同的用户会有不同的字段?您是在谈论用户的类型,即可能是不同的类别吗?
标签: python django authentication
我计划为两个不同的用户使用相同的用户模型,并在一个模型中添加一些附加字段。有可能在 Django 中做到这一点吗?如果可以,我该怎么做?
【问题讨论】:
标签: python django authentication
你有两个选择:
首先
您创建一个新模型(称为 ExtendedUser)并将额外的字段放入该模型中。 然后将 ExtendedUser 模型设置为从 MainUser 模型继承。这将创建两个表,它们之间具有一对一的链接。 这样做的好处是您的 ExtendedUser 模型将继承原始 MainUser 模型中定义的任何方法,并且您只需要在绝对必要时将方法添加到 ExtendedUser 模型。您还可以编写可以轻松处理 MainUser 和 ExtendedUser 模型的函数,因为它们都是 MainUser 模型的实例。使用继承的好处之一是,如果您在 ExtendedUser 模型上编写一个获取所有字段的查询,它也可以很好地获取 MainUser 字段。
第二个(更糟糕的)选择:
有一个单独的扩展模型,上面有一个标志,表明是否使用额外的字段。这可以工作,但会使您的查询更加复杂,并且如果您需要为额外的字段编制索引,则索引的效率可能会降低一些。
注意:在 SQL 中拥有第二个表与两者之间的关系并不是一件坏事——这就是通常管理数据的方式。为某些类型的用户提供特殊的可选字段并不如前所述。
【讨论】: