【发布时间】:2010-02-15 00:59:52
【问题描述】:
问题是默认用户模型没有为字段提供一些非常有用的选项,例如 unique=True 到电子邮件字段。
我阅读了这个问题: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/... 中的文件)
【问题讨论】:
-
啊,来吧...只是一点的胡闹? :-) 不幸的是,我认为你不会找到你真正想要的东西。 每个人都想以一种或另一种方式调整 User 模型,但您发现 Django 数据库“类”不是 Python 类,特别是在覆盖父母。 docs.djangoproject.com/en/dev/topics/db/models/…
-
如果语言本身在内部支持猴子补丁就足够了 ;-) 例如,Ruby 中的类是开放的,因此您可以在运行时更改甚至内置类的实现,从而更改用户模型在 Ruby 中最多可以调整 3 行。无论如何,谢谢你的回复。你知道如何使这种猴子修补合理吗?
标签: django django-models