2011-03-13 61 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是否可能。我最初的猜测是它应该很容易。