Django和猴子补丁问题

4 投票
5 回答
2056 浏览
提问于 2025-04-15 14:11

我最近开始在空闲时间尝试用Django开发一些网页应用。在设计其中一个应用的数据模型时,我遇到了一个难题:是使用继承来定义网站用户,还是用一种叫做“猴子补丁”的技术来修改框架自带的用户类。

我试着通过以下方式添加一个字段(在定义好所有模型并且没有错误后,按照 python manage.py validate 的提示):

User.add_to_class('location', models.CharField(max_length=250,blank=True))

然后我执行了 syncdb 命令。然而,无论是在网站的管理界面还是在 manage.py 的命令行中,我总是收到这个错误:

OperationalError: no such column: auth_user.location

我觉得我可能漏掉了某个步骤,但关于猴子补丁技术的文档似乎很有限。所以在我决定使用继承之前,我想请教一下你们的帮助。任何代码、建议或者额外文档的链接都非常欢迎。

提前谢谢你们。

PS:我知道这种技术不太好,可能也不太推荐。;)

5 个回答

2

这里有一个稍微旧一点的扩展User模型的方法

这是官方文档的相关说明

还有一个关于这个话题的django-users上的最近讨论

13

还有一种替代的方法,就是使用一个相关的个人资料模型。这个方法文档齐全,而且非常推荐。也许你提到的add_to_class方法不太被人提及的原因是,因为它被明确不推荐(这是有原因的)。

7

当你给任何模型添加一个字段时,即使你是按照“官方”的方法来做,还是需要对数据库进行迁移——Django不会自动帮你处理这个。你需要删除表格,然后再运行 ./manage.py syncdb

你可能想了解一下迁移框架,比如 south,它可以帮你管理这些事情。

撰写回答