私は自分のプロジェクトに特有のことをするためにdjango-allauthを拡張しようとしています。私は基本的にdjango-allauthの上に自分自身のラッパーを書こうとしています。インストール、設定、その他のものはallauthと非常によく似ています。Pythonのメタクラスベースとは何ですか?
このため、AppSettings
クラスをallauth/accounts/app_settings.py
から拡張することから始めました。
from allauth.account import app_settings as AllAuthAppSettings
class MyAppSettings (AllAuthAppSettings):
def __init__(self, prefix):
# do something
また、app_settings.pyの終わりに、私は単純に(ジャンゴ-allauth自体からコピー)以下を置く:
import sys
my_app_settings = MyAppSettings('MY_PREFIX_')
my_app_settings.__name__ = __name__
sys.modules[__name__] = my_app_settings
私は私自身のapp_settings.py
はこのような何かをした作成しました私は、Python、Djangoの世界に非常に新しいですし、実際にそれらの最後のFOで何が起こっているか理解していない、正直なところ
TypeError: Error when calling the metaclass bases
__init__() takes exactly 2 arguments (4 given)
:私は私のプロジェクトを開始するとき今、それは私に次のエラーを与えますウルライン。
メタクラスベースとはとは何ですか?それに渡されている4つの議論は何ですか?このフローはどのように動作させるのですか?ここで
は、スタックトレースです:あなたはdjango-allauth
パッケージは魔法いくつかの非常に醜いのpythonをやっている
AllAuthAppSettings
から継承することができるはずのよう
Unhandled exception in thread started by <function wrapper at 0x104146578>
Traceback (most recent call last):
File "/Users/user/anaconda/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/Users/user/anaconda/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/Users/user/anaconda/lib/python2.7/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception
six.reraise(*_exception)
File "/Users/user/anaconda/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/Users/user/anaconda/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/user/anaconda/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Users/user/anaconda/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/Users/user/anaconda/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/user/myproject/my_app/models.py", line 18, in <module>
from .model_managers import *
File "/Users/user/myproject/my_app/model_managers.py", line 89, in <module>
from . import app_settings
File "/Users/user/myproject/my_app/app_settings.py", line 9, in <module>
TypeError: Error when calling the metaclass bases
__init__() takes exactly 2 arguments (4 given)
返信いただきありがとうございます!私はなぜこれがハックな方法であるかについての部分を得た。しかし、私はまだ上記の変更を行うと同じエラーが発生します。カスタムapp_settings.pyにインスタンス化されていないAppSettingsクラスを取得する方法はありますか? – pymd
このクラスからエラーが発生していますか?あなたは完全なトレースバックを持っています –
私はそう思います。私は完全なスタックトレースを追加しました。 – pymd