问题是默认的用户模型没有一些非常有用的选项,例如unique = True的字段给了电子邮件字段。如何重写Django中的默认用户模型字段?
我看了这个问题:Override default User model method,并检查了Proxy Model的概念,但没有任何效果。
起初我想:
from django.contrib.auth import models
class User(models.User):
class Meta:
proxy = True
email = EmailField('e-mail address', unique=True, blank=False)
这就造成:
django.core.exceptions.FieldError: Proxy model 'User' contains model fields.
所以未来是:
from django.contrib.auth import models
class User(models.User):
class Meta:
proxy = True
models.User.email = EmailField('e-mail address', unique=True, blank=False)
而这个 “解决方案” 已经没有任何影响。默认用户模型的行为与以前相同。
我只对非猴子补丁解决方案感兴趣。
编辑:好的。猴子补丁对我来说是可以接受的,但是怎样才能合理呢? (我的意思是不改变这种在于/usr/pyshared/python2.6/...
文件)
啊,来吧......只是一点点的猴子生意? :-)不幸的是,我不认为你会找到你真正想要的东西。 *每个人*都想以某种方式调整用户模型,但是您发现Django数据库的“类”不是* Python类,特别是在父类中重写字段方面。 http://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted – 2010-02-15 01:57:12
如果语言本身在内部支持它,猴子修补就足够了;-)例如Ruby中的类是开放的,所以您可以在运行时更改甚至内置类的实现,因此用户模型可以在Ruby中最多调整3行。 无论如何,感谢您的回应。你知道如何让这只猴子补丁合理吗? – 2010-02-15 02:16:30