implemented ModelAdminBase2 metaclass.

This commit is contained in:
Andrews Medina 2013-06-21 02:41:28 -03:00
parent 7a0f29f2c6
commit b44c66e301
2 changed files with 31 additions and 1 deletions

View file

@ -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
)

View file

@ -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