由于各种复杂的原因[1],我需要向 Django User 类添加额外的属性。
我既不能使用 Profile 也不能使用“继承”方式来做到这一点。(如在 Django 中使用自定义字段扩展用户模型)
所以我一直在做的是在我的 local_settings 文件中包含 User 类。并在那里添加属性。
或许令人惊讶的是,这似乎在许多情况下都有效。但不是当我从 UserManager.create_user() 创建一个新用户时。所以我需要修补 UserManager.create_user() 方法的替代方法。查看源代码(在 contrib.auth.models.py 中),我发现它用于创建用户的类保存在名为 UserManager.model 的属性中,而不是直接引用。
这条线是这样的:
user = self.model(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
问题是这个 self.model(我假设它包含对 User 类的引用)似乎不是我的修补版本。
那么,有谁知道在 UserManager 的情况下这个 self.model 是在哪里设置的?以及我是否正确假设此时代码尚未通过 local_settings 所以我对 User 类的补丁不存在?如果有更好的地方来修补课程?
干杯
菲尔
[1] 满足好奇心。我需要让 User 类使用数据库中不同的现有表,该表具有额外的字段和约束。
更新:为了将来参考,看起来代理模型是 Django 支持我需要的方式: http: //code.djangoproject.com/ticket/10356