【发布时间】:2013-02-21 15:38:51
【问题描述】:
我正在开发站点上进行一些测试,目前使用 Django 1.4。 大多数 Django 用户都知道 Django 1.5 为用户模型带来了更大的灵活性。
我正在进行的项目在auth.User 模型上使用猴子补丁,并且效果很好。这增加了我每次使用的有用方法。
为了兼容性,我没有在 User 模型上添加任何数据库字段,我的代码只涉及到这个:
User.__bases__ += (UserPlus,)
User.__unicode__ = UserPlus.__unicode__
UserPlusManager().contribute_to_class(User, 'objects')
UserPlusManager 是 UserManager 的子类。
现在,假设我想切换到新的用户模型。我在INSTALLED_APPS 中已经有很多应用程序,其中一些在未维护的存储库中,并且模型的字段与 auth.User 相关联。
对于这种配置,我没有看到任何明显的策略。
那么,考虑到这一点,升级到 Django 1.5 真的是可取的吗?如果是这样,我应该采取什么步骤?
【问题讨论】:
-
imo,monkey-patching auth.User 是一种非常简单的方法,可以让您在前向兼容性方面陷入困境。如果你想升级到 1.5,你很可能会重新设计你的补丁。
-
实际上,我已经猴子修补了 auth.User 模型,但没有添加任何数据库字段以实现兼容性。我已经更改了一些方法,并将默认管理器替换为兼容的管理器。我将用这条信息补充我的第一篇文章。
-
我不确定您的问题是否有“好的”答案,因为这完全是基于任何代码利用您的猴子补丁用户的主观判断。
-
我总是可以重构我当前的代码,但真正的问题是如何处理 Github 和 Bitbucket 上随处可见的现有第三方应用程序? (例如 django-activity-stream)我认为他们会打破新模型。
-
如果 Django 改变了它们的结构,这些应用程序必须做出响应。如果该应用程序与 1.5 不兼容,那几乎可以回答您的问题。
标签: django django-models