我最近开始在业余时间尝试使用 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之一,将管理这样的事情你。

其他提示

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

这里的一个(略延伸的User模型的较旧的)的方式。

下面的什么文档必须说

这是一个最近关于Django的用户会话的话题。

Django的框架使用元类初始化表。这意味着你不能猴子补丁在新列,除非你也重新初始化类,这我不知道,甚至有可能。 (这可能是)。

请参阅返回修改的类,并使用类型之间差()更多一些信息。

我想您可能会遇到关于您的 Monkeypatch 定义在哪里的问题。我猜 djangosyncdb 仅从“纯”身份验证应用程序创建数据库表,因此您的模型将没有“位置”,然后带有补丁的站点将查找该字段。

描述了向用户配置文件添加附加信息的可能不太痛苦的方法 在 Django 文档中.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top