django.db.models get_models возвращает пустой список в django1.4
Мой код раньше работал в Django 1.3, но после обновления до Django 1.4 он больше не работает. Идея заключается в создании MenuItem для django-admin-tools со списком моделей из приложения.
from admin_tools.utils import AppListElementMixin
from app import models as my_models
class CustomMenu(Menu):
def init_with_context(self, context):
app_list=AppListElementMixin()
'''ERROR not working after upgrade to django 1.4, returns empty list'''
all_models = get_models(app_mod=my_models)
''''''
dict_models = {}
for model in all_models:
dict_models[model.__name__] = items.MenuItem(
title=model._meta.verbose_name_plural,
url=app_list._get_admin_change_url(model, context)
)
2 ответа
Решение
Попробуйте добавить ваше приложение в settings.py INSTALLED_APPS и сделайте это
from django.db.models import get_models, get_app
и это
all_models = get_models(app_mod=get_app('app'))
Если ваша цель - добавить пункт меню для каждой модели, вы можете попробовать:
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from admin_tools.menu import items, Menu
class CustomMenu(Menu):
def __init__(self, **kwargs):
Menu.__init__(self, **kwargs)
self.children += [
# Other items that are in the menu eg "items.Bookmarks()," go here
items.AppList(
_('Name of the submenu'), # Your own choosing
models=('app.models.*',) # Assuming your django app is called "app"
)
]
def init_with_context(self, context):
return super(CustomMenu, self).init_with_context(context)
Это то, что я работаю в одном из моих проектов.