我正在开展一个项目,要求我使用该用户的用户名创建一个在网站上注册的每个用户的表格。表中的列对于每个用户都是相同的。
在研究时我发现了Django dynamic model fields。我不确定如何使用django-mutant来实现这一目标。另外,如果不使用任何外部应用程序,我有什么方法可以做到这一点吗?
PS:我使用的后端是Mysql
答案 0 :(得分:7)
一个有趣的问题,可能会引起更广泛的兴趣。
为每个用户创建一个表是一个维护噩梦。您应该定义一个表来保存所有用户的数据,然后使用数据库的功能仅检索与感兴趣的用户相关的那些行(如果需要,在检查权限之后,因为给任何用户不受限制不是一个好主意在没有设置特定权限的情况下访问其他用户的数据。)
采用您提出的解决方案需要您构造包含相关用户表名的SQL语句。对数据库的连续查询通常会有所不同,这会减慢工作量,因为每个SQL语句都必须“准备好”(必须检查语法,必须验证表和列的名称,请求用户的权限)访问命名资源必须经过授权,等等。
通过使用单个表(模型),可以重复使用相同的查询,其中参数用于改变特定数据值(在这种情况下是正在搜索其数据的用户的名称)。您的数据库工作将更快地进行,您只需要一个模型来描述所有用户的数据,而数据库管理将不会是一场噩梦。
另一个优点是Django(您似乎正在使用)具有广泛的基于用户的权限模型,并且可以轻松地用于验证用户登录(一旦您知道如何)。这些优点非常引人注目,我希望你能从你的异端中退出,并决定你可以使用单个表(并且,如果你计划使用标准的Django登录,那么与用户模型的关系,作为任何Django的核心部分)项目)。
在您继续操作时,请随时提出更多问题。您似乎对数据库工作不熟悉,因此我尝试提供适当级别的详细信息。如果您无法访问知识渊博的建议,则存在许多此类陷阱。 SO上的人会帮助你。
答案 1 :(得分:3)
This page显示了如何动态创建模型并将表安装到数据库。因此,您可以使用type('table_with_username', (models.Model,), attrs)
创建模型并使用django.core.management
将其安装到数据库中。