Django 和 Monkey 补丁问题
-
22-09-2019 - |
题
我最近开始在业余时间尝试使用 Django 来开发一些 Web 应用程序。在设计数据模型时,我遇到了使用继承来定义网站用户或使用框架已提供的 User 类的猴子修补技术的困境。
我尝试通过(在定义了我的所有模型等之后)添加一个字段。没有错误,根据 python manage.py validate
):
User.add_to_class('location', models.CharField(max_length=250,blank=True))
并执行了 syncdb
命令。但是,我不断收到此错误
操作错误:没有这样的列:auth_user.location
无论我是在网站的管理视图还是manage.py shell中。我一定缺少一个额外的步骤,但关于整个猴子修补技术的文档似乎很有限。所以在我诉诸继承之前我请求你的帮助。当然,欢迎提供任何代码、提示或其他文档的指针。
提前致谢。
附言。我知道这种技术很丑陋,而且可能是不明智的。;)
解决方案
当你添加一个字段的任何模型,即使你是“官方”的方式,你需要迁移数据库 - Django不为你做它。再次删除该表和运行./manage.py syncdb
。
您可能需要调查的迁移框架,如south
之一,将管理这样的事情你。
其他提示
Django的框架使用元类初始化表。这意味着你不能猴子补丁在新列,除非你也重新初始化类,这我不知道,甚至有可能。 (这可能是)。
请参阅返回修改的类,并使用类型之间差()更多一些信息。
我想您可能会遇到关于您的 Monkeypatch 定义在哪里的问题。我猜 djangosyncdb 仅从“纯”身份验证应用程序创建数据库表,因此您的模型将没有“位置”,然后带有补丁的站点将查找该字段。
描述了向用户配置文件添加附加信息的可能不太痛苦的方法 在 Django 文档中.