Это дополнительный вопрос к этому вопросу.
Я хотел бы автоматизировать импорт классов из файла django models.py, а затем зарегистрировать каждый из них с помощью admin.site.register(). Вот мой код:
from django.contrib import admin
import inspect
from . import models
for name, obj in inspect.getmembers(models):
if inspect.isclass(obj):
admin.site.register(obj)
Этот код выдает ошибку TypeError: объект 'type' не повторяется.
ОП пометил этот вопрос как ответный, и я' Я нашел еще несколько примеров, где представлен этот код. Я также просмотрел документацию здесь и не нашел ничего, что указывало бы на то, что это неправильно.
Полная обратная трассировка:
Bills-MacBook-Pro:Pro billarmstrong$ python manage.py runserver/anaconda3/lib/python3.6/site-packages/django/db/models/base.py:309:RuntimeWarning: Model 'ProWP.p_item' was already registered. Reloading models is not advised as it can lead to inconsistencies, most notably with related models. new_class._meta.apps.register_model(new_class._meta.app_label, new_class)/anaconda3/lib/python3.6/site-packages/django/db/models/base.py:309:RuntimeWarning: Model 'ProWP.p_item' was already registered. Reloading models is not advised as it can lead to inconsistencies, most notably with related models.
new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
Unhandled exception in thread started by
Traceback (most recent call last):
File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/anaconda3/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 112, in inner_run
autoreload.raise_last_exception()
File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception
raise _exception[1]
File "/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 327, in execute
autoreload.check_errors(django.setup)()
File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/anaconda3/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/anaconda3/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate
app_config.ready()
File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 23, in ready
self.module.autodiscover()
File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "/anaconda3/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "/anaconda3/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "/Users/billarmstrong/Documents/GitHub/Core/WebDataCollect/Pro/ProWP/admin.py", line 7, in
admin.site.register(obj)
File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 102, in register
for model in model_or_iterable:
TypeError: 'type' object is not iterable
После запуска сервера во второй раз появляется новое предупреждение, но оно не было частью исходной ошибки. Я включил все для справки. p_item — это объект класса в models.py.
Окончательное редактирование
Указанное выше предупреждение было результатом неаккуратное вырезание/вставка, дублирующее класс. Это не имеет отношения к исходному вопросу или ответу ниже.
Это дополнительный вопрос к этому вопросу. Я хотел бы автоматизировать импорт классов из файла django models.py, а затем зарегистрировать каждый из них с помощью admin.site.register(). Вот мой код: [code]from django.contrib import admin import inspect from . import models
for name, obj in inspect.getmembers(models): if inspect.isclass(obj): admin.site.register(obj) [/code] Этот код выдает ошибку TypeError: объект 'type' не повторяется. ОП пометил этот вопрос как ответный, и я' Я нашел еще несколько примеров, где представлен этот код. Я также просмотрел документацию здесь и не нашел ничего, что указывало бы на то, что это неправильно. Полная обратная трассировка: [code]Bills-MacBook-Pro:Pro billarmstrong$ python manage.py runserver/anaconda3/lib/python3.6/site-packages/django/db/models/base.py:309:RuntimeWarning: Model 'ProWP.p_item' was already registered. Reloading models is not advised as it can lead to inconsistencies, most notably with related models. new_class._meta.apps.register_model(new_class._meta.app_label, new_class)/anaconda3/lib/python3.6/site-packages/django/db/models/base.py:309:RuntimeWarning: Model 'ProWP.p_item' was already registered. Reloading models is not advised as it can lead to inconsistencies, most notably with related models. new_class._meta.apps.register_model(new_class._meta.app_label, new_class) Unhandled exception in thread started by Traceback (most recent call last): File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper fn(*args, **kwargs) File "/anaconda3/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 112, in inner_run autoreload.raise_last_exception() File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception raise _exception[1] File "/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 327, in execute autoreload.check_errors(django.setup)() File "/anaconda3/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper fn(*args, **kwargs) File "/anaconda3/lib/python3.6/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/anaconda3/lib/python3.6/site-packages/django/apps/registry.py", line 120, in populate app_config.ready() File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 23, in ready self.module.autodiscover() File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover autodiscover_modules('admin', register_to=site) File "/anaconda3/lib/python3.6/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules import_module('%s.%s' % (app_config.name, module_to_search)) File "/anaconda3/lib/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "", line 971, in _find_and_load File "", line 955, in _find_and_load_unlocked File "", line 665, in _load_unlocked File "", line 678, in exec_module File "", line 219, in _call_with_frames_removed File "/Users/billarmstrong/Documents/GitHub/Core/WebDataCollect/Pro/ProWP/admin.py", line 7, in admin.site.register(obj) File "/anaconda3/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 102, in register for model in model_or_iterable: TypeError: 'type' object is not iterable [/code] После запуска сервера во второй раз появляется новое предупреждение, но оно не было частью исходной ошибки. Я включил все для справки. p_item — это объект класса в models.py. Окончательное редактирование Указанное выше предупреждение было результатом неаккуратное вырезание/вставка, дублирующее класс. Это не имеет отношения к исходному вопросу или ответу ниже.