2010-02-15 72 views
5

问题是默认的用户模型没有一些非常有用的选项,例如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/...文件)

+0

啊,来吧......只是一点点的猴子生意? :-)不幸的是,我不认为你会找到你真正想要的东西。 *每个人*都想以某种方式调整用户模型,但是您发现Django数据库的“类”不是* Python类,特别是在父类中重写字段方面。 http://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted – 2010-02-15 01:57:12

+0

如果语言本身在内部支持它,猴子修补就足够了;-)例如Ruby中的类是开放的,所以您可以在运行时更改甚至内置类的实现,因此用户模型可以在Ruby中最多调整3行。 无论如何,感谢您的回应。你知道如何让这只猴子补丁合理吗? – 2010-02-15 02:16:30

回答

3

有这个已经问... How to make email field unique in model User from contrib.auth in Django

而且额外的用户数据的Django的方法是在这里http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles

我并不完全是这种方法的粉丝,并且非常感谢你来自哪里,但有时你必须跟着牛群去。

+0

感谢您的回复。首先,我正在寻找一种方法来添加到用户模型不仅电子邮件字段唯一性验证。写自己的表格来检查电子邮件的唯一性的解决方案是我想避免的(第一个链接)。为什么?我认为更好的方法是更深入地添加验证。另一方面,我可以将电子邮件字段添加到UserProfile模型,但是这会使数据库中的信息翻倍。 *叹*但我想我会坚持表单验证方法。 – 2010-02-15 10:15:19

相关问题