Django和猴子修补问题

Mic*_*kis 4 python django monkeypatching

我最近在业余时间开始尝试使用Django来处理一些Web应用程序.在为一个设计数据模型时,我遇到了使用继承来定义网站用户或使用已经由框架提供的User类进行猴子修补的技术的困境.

我尝试通过(根据以下方式定义了所有模型等而没有错误python manage.py validate)添加字段:

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

并执行了syncdb命令.但是,我一直收到这个错误

OperationalError:没有这样的列:auth_user.location

我是在网站的管理员视图还是manage.py shell.必须有一个我缺少的额外步骤,但似乎有关整个猴子修补技术的文档有限.所以,在我诉诸继承之前,我会请求你的帮助.当然欢迎任何代码,提示或指向其他文档的链接.

提前致谢.

PS.我知道这种技术很难看,而且可能是不明智的.;)

oza*_*zan 13

两种方法都有一种替代方法,即简单地使用相关的配置文件模型.这也恰好是一个记录良好,强烈推荐的方法.正如你所指出的那样,add_to_class方法没有详细记录的原因可能是因为它明确不鼓励(有充分理由).


Dan*_*man 7

当您向任何模型添加字段时,即使您以"官方"方式执行此操作,也需要迁移数据库 - Django不会为您执行此操作.放下桌子再跑./manage.py syncdb一次.

您可能想要调查其中一个迁移框架,例如south,它将为您管理此类事情.