在Django中扩展contrib模型的字段

时间:2011-03-13 21:36:04

标签: django django-models django-contrib

我已多次遇到过这种情况。

如果我在contrib中有一些我喜欢的东西,但我想对一个字段做一个小调整,我该怎么办?

我不想把洗澡水扔掉。

举一个例子,请使用auth.user(与此相关的流行观点相反,我认为通常是在正确的轨道上)。我想为auth.user与auth.group的关系创建一个直通模型。

如何在不修改django的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

auth.User是一个特殊情况,因为User模型与Django的许多部分绑定在一起并且修改它很棘手(尽管并非不可能,正如其他人所指出的那样)。我最好的建议是质疑为什么你不想修改Django源代码。您可以为devel分支的头部提取源,或者获取与编号版本对应的标记版本。随意修改代码,并使用svn updatesvn diffsvn patch的某种组合来迁移您的更改。

接下来,您可以在代码中修改contrib模块,因为Python是经过解释和动态输入的。如果这样做,您需要考虑解析/处理顺序,因为某些操作可能已经使用了原始模块。以下是我从其他人(可能在此处)获得的示例,了解如何从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])

但是,我认为此策略不会在ModelFields中添加/修改django.contrib.auth.models.User

最后,对于您将组与用户相关联的具体示例,您应该看看creating a UserProfile model是否可以实现这一点。我最初的猜测是它应该很容易。