Я пытаюсь расширить django-allauth, чтобы сделать что-то конкретное для моих проектов. Я в основном пытаюсь написать свою собственную оболочку поверх django-allauth и хочу, чтобы установка, конфигурация и другие материалы были очень похожими на allauth.Что такое метаклассовые базы в Python?
Для этого я начал с расширения AppSettings
класса от allauth/accounts/app_settings.py
. Я создал свой собственный 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
Теперь, когда я начинаю свой проект, он дает мне следующую ошибку:
TypeError: Error when calling the metaclass bases
__init__() takes exactly 2 arguments (4 given)
Честно говоря, я совсем новичок в мир Python-Django и на самом деле не понимаю, что происходит в этом последнем фо ур.
Что такое Основания метакласса? Каковы четыре аргумента, которые передаются ему? Как мне заставить этот поток работать?
Вот трассировки стека:
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)
благодарит за ответ! Я получил информацию о том, почему это хакерский путь. Тем не менее, я все равно получаю ту же ошибку при выполнении вышеуказанных изменений. Есть ли способ получить неподтвержденный класс AppSettings в моем пользовательском app_settings.py? – pymd
Вы уверены, что ошибка исходит от этого класса? У вас есть полная трассировка –
Думаю, что да. Я добавил полную трассировку стека. – pymd