Django中的动态数据库表
我正在做一个项目,需要创建一个表格,记录每个在网站上注册的用户,表格里会用到用户的用户名。这个表格的列对每个用户都是一样的。
在研究的时候,我发现了这个 Django 动态模型字段 的内容。我不太确定怎么使用 django-mutant 来实现这个功能。另外,有没有办法在不使用任何外部应用的情况下做到这一点呢?
另外,我使用的后端是 Mysql。
2 个回答
这个页面介绍了如何动态创建一个模型,并把它的表安装到数据库里。简单来说,你可以用 type('table_with_username', (models.Model,), attrs)
来创建一个模型,然后用 django.core.management
把它安装到数据库中。
这是个有趣的问题,可能对很多人都有帮助。
为每个用户创建一个表格会让管理变得非常麻烦。你应该只定义一个表格来存储所有用户的数据,然后利用数据库的功能,只提取与特定用户相关的记录(如果需要的话,先检查权限,因为随便让用户访问其他用户的数据并不是个好主意,应该先设置好权限)。
如果你采用你提议的方案,就需要构建包含相关用户表名的SQL语句。每次查询数据库时,语句大部分都会不同,这样会拖慢工作速度,因为每个SQL语句都需要“准备”(要检查语法,验证表名和列名,确认请求用户访问这些资源的权限等等)。
而使用一个单一的表格(模型),就可以重复使用相同的查询,只需用参数来改变特定的数据值(在这种情况下,就是你要查找的用户的名字)。这样你的数据库操作会更快,你只需要一个模型来描述所有用户的数据,数据库管理也不会那么麻烦。
还有一个好处是,Django(看起来你在用这个)有一个非常完善的基于用户的权限模型,可以很容易地用来验证用户登录(只要你知道怎么做)。这些优点非常明显,我希望你能放弃之前的想法,决定只用一个表格(如果你打算使用标准的Django登录,还可以和Django项目中自带的用户模型建立关系)。
如果你在这个过程中有更多问题,请随时问。看起来你对数据库工作还不太熟悉,所以我尽量提供了适当的细节。如果没有专业的建议,确实会有很多陷阱。Stack Overflow上的人们会帮助你。