两次扩展用户模型的最佳解决方案(学生/教师)

Posted

技术标签:

【中文标题】两次扩展用户模型的最佳解决方案(学生/教师)【英文标题】:Best solution for extending user model twice (Student / Teacher) 【发布时间】:2021-07-31 12:18:49 【问题描述】:

我正在用 Django 编写一个应用程序,其中有两种类型的用户需要登录 web 应用程序:教师和学生。 现在我不确定什么是最好的方法。 我已经阅读了很多解释如何扩展用户模型的教程和 *** 问题,但我不确定哪个是最佳选择。

要求:

需要2种不同领域的个人资料(教师和学生) 可以拥有单独的管理“对象”,应用程序的超级员工可以在其中登录后端并管理单独的对象。

选项 1:

利用该方法扩展 AbstractUser 类。 这暂时有效,但是我不知道我是否可以使用 AUTH_USER_MODEL 两次(老师和学生)。现在它是一个包含学生和教师两个领域的个人资料。 使用代理模型,我只能为教师或学生显示必要的字段。

选项2:(我认为这是最好的解决方案)

制作 2 个模型(教师和学生),每个模型都有一个外键到用户 (OneToOneField)。 这里的问题是,如果网站的管理员创建了一个新的教师或学生,他们还需要先创建一个单独的用户(可以登录),然后在创建教师或学生时链接它。 (我可以用我认为的信号来解决这个问题)。

对于这种情况,最佳方法/最佳实践是什么?

【问题讨论】:

我会选择 2。这样,如果需要,用户既可以是学生又可以是老师(在某些学校可能会发生这种情况!),而不会带来额外的麻烦。 【参考方案1】:

我个人会选择选项 2。

我不确定您打算如何创建用户(教师/学生)。如果是通过管理面板,那么您可以在创建教师/学生时使用单独的弹出窗口创建用户。这样做将创建该链接。

如果您使用的是自定义表单,则可以包含您希望从用户模型和自定义模型中包含的字段。然后在视图中,您可以在 User 模型和您的自定义模型中创建模型一行并将两者链接起来。

【讨论】:

好的,谢谢!它将主要在管理面板中使用,所以我会选择选项 2,一对一字段。

以上是关于两次扩展用户模型的最佳解决方案(学生/教师)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中的多对多关系

Spring - 使用休眠和弹簧安全扩展类

Firefly互动数字班牌解决方案

如何制作可扩展的 Eloquent 模型?

关于各地区并发高的解决思路

面向对象实验一