3

这种情况我遇到过好几次了。

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

我不想把婴儿和洗澡水一起倒掉。

举个例子,以 auth.user 为例(与似乎对此事的普遍看法相反,我认为这通常是正确的)。我想为 auth.user 与 auth.group 的关系创建一个直通模型。

如何在不修改 django 的情况下做到这一点?

4

1 回答 1

0

auth.User是一种特殊情况,因为 User 模型与 Django 的许多部分相关联,并且修改它很棘手(尽管并非不可能,正如其他人指出的那样)。我最好的建议是质疑你为什么不想修改 Django 源代码。您可以为 devel 分支的头部提取源代码,也可以获取与编号版本相对应的标记版本。随意修改代码并使用 、 和 的某种组合svn updatesvn 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])

但是,我认为这种策略不适用于添加/修改ModelFieldsin django.contrib.auth.models.User

最后,对于将组与用户关联的具体示例,您应该通过创建 UserProfile 模型来查看这是否可行。我最初的猜测是它应该很容易。

于 2011-03-16T03:34:11.390 回答