【问题标题】:Extending a field of a contrib model in Django在 Django 中扩展 contrib 模型的字段
【发布时间】:2011-07-14 15:17:17
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为了在不触及源代码的情况下进行细微调整,我将人们指向这篇文章:stackoverflow.com/questions/2610088/…。不幸的是,关系经理对我来说有点神奇和难以理解。我刚才在实验中无法让它发挥作用。

标签: django django-models django-contrib


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 2015-10-11
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多