2012-09-23 49 views
2

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

我创建了一个名为'accounts'的应用程序,它从Django-Userena中调用。在我的帐户“的应用程序,我有了一个类我的资料,从Django的Userena类UserenaBaseProfile继承此models.py文件 - 类我的资料(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 /#字段名称隐藏是不允许的)

我目前的解决方案是在调用类之前在我的“accounts”应用models.py中简单地包含整个UserenaBaseProfile类下面是MyProfile(UserenaBaseProfile)。

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

非常感谢。

回答

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模板加载器可以首先找到您的模板文件(这取决于如何配置模板加载器在你的settings.py中)

相关问题