2011-03-13 23 views
3

我已經多次遇到過這種情況。在Django中擴展一個contrib模型的字段

如果我在contrib中有一些我一般喜歡的東西,但是我想對一個字段做一些小調整,我該怎麼做?

我不想用洗澡水把嬰兒扔掉。

舉一個例子,取auth.user(與此相反,這似乎是流行的意見,我認爲一般是在正確的軌道上)。我想爲auth.user與auth.group的關係創建一個貫穿模型。

如何在不修改django的情況下做到這一點?

+1

爲了在不觸及源代碼的情況下進行小小的調整,我將人指向這篇文章:http://stackoverflow.com/questions/2610088/can-djangos-auth-user-username-be-varchar75-how-could-that -做完了 。不幸的是,關係經理對我而言更難以理解。我無法在我的實驗中工作。 – 2011-03-13 22:29:26

回答

0

auth.User是一個特殊情況,因爲用戶模型與Django的很多部分綁定在一起,修改它很困難(雖然並非不可能,正如其他人指出的那樣)。我最好的建議是問你爲什麼不想修改Django源代碼。您可以將源代碼拉到devel分支的頭部,或者獲取與編號版本相對應的標記版本。隨意修改代碼並使用svn update,svn diffsvn patch的某種組合來遷移您的更改。

接下來,可以在代碼中對contrib模塊進行修改,因爲Python是被解釋和動態輸入的。如果你這樣做,你需要考慮解析/處理順序,因爲一些操作可能已經使用了原始模塊。下面是我從別人那裏得到了一個例子(也許在這裏SO)如何從User添加方便的向參考了相關Profile對象:

from django.db.models import Model 
from django.contrib.auth.models import User 

class UserProfile(Model): 
    user = ForeignKey(User, unique=True) 
    phone = CharField(verbose_name="phone number", blank=False, max_length='20') 

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 

我不認爲這個策略將添加工作/然而,在django.contrib.auth.models.User中修改ModelFields

最後,對於將組與用戶關聯的具體示例,您應該看看creating a UserProfile model是否可能。我最初的猜測是它應該很容易。