我已经安装了一个django可重用的应用程序(Django-Userena),并且想要覆盖给定的models.py文件。
我创建了一个名为'accounts'的应用程序,可以从Django-Userena调用。在我的'accounts'应用程序中,我有这个models.py文件,它有一个继承自Django-Userena类的MyProfile类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/topics/db/models/#field-name-hiding-is-not-permitted)
我目前的解决方案是在下面调用类MyProfile(UserenaBaseProfile)之前,在我的'accounts'应用程序models.py中简单地包含整个UserenaBaseProfile类。
对我来说,这看起来不是一个优雅的解决方案。你们如何重写可重用应用程序中的models.py文件?
非常感谢。
答案 0 :(得分:3)
在我看来,可以通过两种方式完成:
使用修改过的模型制作Django-Userena的分支,然后使用你的。
使用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模板加载器可以首先找到您的模板文件(这取决于模板加载器的配置方式)你的settings.py)