2

我已经安装了一个 django 可重用应用程序(Django-Userena),并希望覆盖给定的 models.py 文件。

我创建了一个名为“accounts”的应用程序,它从 Django-Userena 调用。在我的“帐户”应用程序中,我有这个 models.py 文件,它有一个类 MyProfile,它继承自 Django-Userena 类 UserenaBaseProfile - 类 MyProfile(UserenaBaseProfile)

在 UserenaBaseProfile 类中,有以下代码:

privacy = models.CharField(_('privacy'),
                           max_length=15,
                           choices=PRIVACY_CHOICES,
                           default=userena_settings.USERENA_DEFAULT_PRIVACY,
                           help_text = _('Designates who can view your profile.'))

我想用“editable=False”的额外值来扩展隐私,因为我不希望这个字段显示在自动生成的表单中。

我尝试了几种方法,例如使用新设置在 MyProfile 继承模型中再次调用隐私,但我只知道 Django 的“不允许字段名称“隐藏””(https://docs.djangoproject.com/en/1.4/主题/db/models/#field-name-hiding-is-not-permitted)

我当前的解决方案是在我的“帐户”应用程序 models.py 中简单地包含整个 UserenaBaseProfile 类,然后再调用下面的类 MyProfile(UserenaBaseProfile)。

对我来说,这看起来不是一个优雅的解决方案。你们如何覆盖可重用应用程序中的 models.py 文件?

非常感谢你。

4

1 回答 1

3

在我看来,它可以通过两种方式完成:

  1. 用你修改过的模型创建一个 Django-Userena 的分支,然后使用你的。

  2. 使用您的 models.py 制作 Django-Userena 包装器并使用您的包装器应用程序。

对于 urls.py/views.py 你可以放:

#Your wrapper views:
from django-userena.views import *

#your wrapper urls:
from django-userena.urls import *

这是您的模型:

#your MODIFIED model:
from django-userena.models import *
# then put you new UserenaBaseProfile

class UserenaBaseProfile(models.Model):
    #copy the model fields
    ...
    privacy = models.CharField(_('privacy'),
                       max_length=15,
                       choices=PRIVACY_CHOICES,
                       default=userena_settings.USERENA_DEFAULT_PRIVACY,
                       help_text = _('Designates who can view your profile.'))

然后您可以在您的项目中使用您的自定义应用程序。

如果你想自定义模板,在你的项目中创建一个模板目录,并将修改后的模板文件放在那里,保持原来的名称,这样 django 模板加载器可以首先找到你的(这取决于模板加载器在你的设置中是如何配置的。 py)

于 2012-09-23T10:29:12.263 回答