diff --git a/djadmin2/tests/test_types.py b/djadmin2/tests/test_types.py index 2eab91d..a7a6312 100644 --- a/djadmin2/tests/test_types.py +++ b/djadmin2/tests/test_types.py @@ -1,6 +1,8 @@ from django.test import TestCase +from django.views.generic import View -from ..types import immutable_admin_factory +from ..types import ModelAdmin2, immutable_admin_factory +from ..views import AdminView class ModelAdmin(object): @@ -34,3 +36,18 @@ class ImmutableAdminFactoryTests(TestCase): with self.assertRaises(AttributeError): # 'ImmutableAdmin' object has no attribute 'd' self.immutable_admin.d + + +class ModelAdminTest(TestCase): + + def setUp(self): + class MyModelAdmin(ModelAdmin2): + my_view = AdminView(r'^$', View) + + self.model_admin = MyModelAdmin + + def test_views(self): + self.assertEquals( + self.model_admin.views[0], + self.model_admin.my_view + ) diff --git a/djadmin2/types.py b/djadmin2/types.py index 5047381..50ab681 100644 --- a/djadmin2/types.py +++ b/djadmin2/types.py @@ -17,11 +17,23 @@ from .forms import modelform_factory logger = logging.getLogger('djadmin2') +class ModelAdminBase2(type): + + def __new__(cls, name, bases, attrs): + view_list = [] + for attr in attrs.values(): + if isinstance(attr, views.AdminView): + view_list.append(attr) + attrs['views'] = view_list + return super(ModelAdminBase2, cls).__new__(cls, name, bases, attrs) + + class ModelAdmin2(object): """ Warning: This class is targeted for reduction. It's bloated and ugly. """ + __metaclass__ = ModelAdminBase2 list_display = ('__str__',) list_display_links = () @@ -75,6 +87,7 @@ class ModelAdmin2(object): update_view = views.ModelEditFormView detail_view = views.ModelDetailView delete_view = views.ModelDeleteView + views = [] # API configuration api_serializer_class = None