我已經多次遇到過這種情況。在Django中擴展一個contrib模型的字段
如果我在contrib中有一些我一般喜歡的東西,但是我想對一個字段做一些小調整,我該怎麼做?
我不想用洗澡水把嬰兒扔掉。
舉一個例子,取auth.user(與此相反,這似乎是流行的意見,我認爲一般是在正確的軌道上)。我想爲auth.user與auth.group的關係創建一個貫穿模型。
如何在不修改django的情況下做到這一點?
我已經多次遇到過這種情況。在Django中擴展一個contrib模型的字段
如果我在contrib中有一些我一般喜歡的東西,但是我想對一個字段做一些小調整,我該怎麼做?
我不想用洗澡水把嬰兒扔掉。
舉一個例子,取auth.user(與此相反,這似乎是流行的意見,我認爲一般是在正確的軌道上)。我想爲auth.user與auth.group的關係創建一個貫穿模型。
如何在不修改django的情況下做到這一點?
auth.User
是一個特殊情況,因爲用戶模型與Django的很多部分綁定在一起,修改它很困難(雖然並非不可能,正如其他人指出的那樣)。我最好的建議是問你爲什麼不想修改Django源代碼。您可以將源代碼拉到devel分支的頭部,或者獲取與編號版本相對應的標記版本。隨意修改代碼並使用svn update
,svn diff
和svn 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是否可能。我最初的猜測是它應該很容易。
爲了在不觸及源代碼的情況下進行小小的調整,我將人指向這篇文章:http://stackoverflow.com/questions/2610088/can-djangos-auth-user-username-be-varchar75-how-could-that -做完了 。不幸的是,關係經理對我而言更難以理解。我無法在我的實驗中工作。 – 2011-03-13 22:29:26