2

Django の再利用可能なアプリ (Django-Userena) をインストールしましたが、指定された models.py ファイルを上書きしたいと考えています。

Django-Userena から呼び出す「アカウント」という名前のアプリを作成しました。私の「アカウント」アプリには、Django-Userena クラス UserenaBaseProfile - クラス MyProfile(UserenaBaseProfile) から継承するクラス MyProfile を持つこの models.py ファイルがあります。

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/) しか認識されません。 topic/db/models/#フィールド名非表示不可)

私の現在の解決策は、以下のクラス MyProfile(UserenaBaseProfile) を呼び出す前に、UserenaBaseProfile クラス全体を「アカウント」アプリの models.py に単純に含めることです。

これは私にはエレガントな解決策のようには見えません。再利用可能なアプリで models.py ファイルをオーバーライドするにはどうすればよいですか?

どうもありがとうございました。

4

1 に答える 1

3

私の意見では、それは2つの方法で行うことができます:

  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 テンプレート ローダーが最初にテンプレート ファイルを見つけることができます (設定でテンプレート ローダーがどのように構成されているかによって異なります)。パイ)

于 2012-09-23T10:29:12.263 に答える