Django和猴子补丁问题
我最近开始在空闲时间尝试用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
13
还有一种替代的方法,就是使用一个相关的个人资料模型。这个方法文档齐全,而且非常推荐。也许你提到的add_to_class方法不太被人提及的原因是,因为它被明确不推荐(这是有原因的)。
7
当你给任何模型添加一个字段时,即使你是按照“官方”的方法来做,还是需要对数据库进行迁移——Django不会自动帮你处理这个。你需要删除表格,然后再运行 ./manage.py syncdb
。
你可能想了解一下迁移框架,比如 south
,它可以帮你管理这些事情。