2010-02-15 99 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