Loading django/contrib/admin/__init__.py +1 −0 Original line number Diff line number Diff line # ACTION_CHECKBOX_NAME is unused, but should stay since its import from here # has been referenced in documentation. from django.contrib.admin.decorators import register from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL from django.contrib.admin.options import StackedInline, TabularInline Loading django/contrib/admin/decorators.py 0 → 100644 +28 −0 Original line number Diff line number Diff line def register(*models, **kwargs): """ Registers the given model(s) classes and wrapped ModelAdmin class with admin site: @register(Author) class AuthorAdmin(admin.ModelAdmin): pass A kwarg of `site` can be passed as the admin site, otherwise the default admin site will be used. """ from django.contrib.admin import ModelAdmin from django.contrib.admin.sites import site, AdminSite def _model_admin_wrapper(admin_class): admin_site = kwargs.pop('site', site) if not isinstance(admin_site, AdminSite): raise ValueError('site must subclass AdminSite') if not issubclass(admin_class, ModelAdmin): raise ValueError('Wrapped class must sublcass ModelAdmin.') admin_site.register(models, admin_class=admin_class) return admin_class return _model_admin_wrapper docs/ref/contrib/admin/index.txt +28 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,34 @@ Other topics admin.site.register(Author) The register decorator ---------------------- .. function:: register(*models, [site=django.admin.sites.site]) .. versionadded:: 1.7 There is also a decorator for registering your ``ModelAdmin`` classes:: from django.contrib import admin from .models import Author @admin.register(Author) class AuthorAdmin(admin.ModelAdmin): pass It is given one or more model classes to register with the ``ModelAdmin`` and an optional keyword argument ``site`` if you are not using the default ``AdminSite``:: from django.contrib import admin from .models import Author, Reader, Editor from myproject.admin_site import custom_admin_site @admin.register(Author, Reader, Editor, site=custom_admin_site) class PersonAdmin(admin.ModelAdmin): pass ``ModelAdmin`` options ---------------------- Loading docs/releases/1.7.txt +4 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,10 @@ Minor features customize the value of :attr:`ModelAdmin.fields <django.contrib.admin.ModelAdmin.fields>`. * In addition to the existing ``admin.site.register`` syntax, you can use the new :func:`~django.contrib.admin.register` decorator to register a :class:`~django.contrib.admin.ModelAdmin`. :mod:`django.contrib.auth` ^^^^^^^^^^^^^^^^^^^^^^^^^^ Loading tests/admin_registration/models.py +6 −0 Original line number Diff line number Diff line Loading @@ -8,9 +8,15 @@ from django.db import models class Person(models.Model): name = models.CharField(max_length=200) class Traveler(Person): pass class Location(models.Model): class Meta: abstract = True class Place(Location): name = models.CharField(max_length=200) Loading
django/contrib/admin/__init__.py +1 −0 Original line number Diff line number Diff line # ACTION_CHECKBOX_NAME is unused, but should stay since its import from here # has been referenced in documentation. from django.contrib.admin.decorators import register from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL from django.contrib.admin.options import StackedInline, TabularInline Loading
django/contrib/admin/decorators.py 0 → 100644 +28 −0 Original line number Diff line number Diff line def register(*models, **kwargs): """ Registers the given model(s) classes and wrapped ModelAdmin class with admin site: @register(Author) class AuthorAdmin(admin.ModelAdmin): pass A kwarg of `site` can be passed as the admin site, otherwise the default admin site will be used. """ from django.contrib.admin import ModelAdmin from django.contrib.admin.sites import site, AdminSite def _model_admin_wrapper(admin_class): admin_site = kwargs.pop('site', site) if not isinstance(admin_site, AdminSite): raise ValueError('site must subclass AdminSite') if not issubclass(admin_class, ModelAdmin): raise ValueError('Wrapped class must sublcass ModelAdmin.') admin_site.register(models, admin_class=admin_class) return admin_class return _model_admin_wrapper
docs/ref/contrib/admin/index.txt +28 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,34 @@ Other topics admin.site.register(Author) The register decorator ---------------------- .. function:: register(*models, [site=django.admin.sites.site]) .. versionadded:: 1.7 There is also a decorator for registering your ``ModelAdmin`` classes:: from django.contrib import admin from .models import Author @admin.register(Author) class AuthorAdmin(admin.ModelAdmin): pass It is given one or more model classes to register with the ``ModelAdmin`` and an optional keyword argument ``site`` if you are not using the default ``AdminSite``:: from django.contrib import admin from .models import Author, Reader, Editor from myproject.admin_site import custom_admin_site @admin.register(Author, Reader, Editor, site=custom_admin_site) class PersonAdmin(admin.ModelAdmin): pass ``ModelAdmin`` options ---------------------- Loading
docs/releases/1.7.txt +4 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,10 @@ Minor features customize the value of :attr:`ModelAdmin.fields <django.contrib.admin.ModelAdmin.fields>`. * In addition to the existing ``admin.site.register`` syntax, you can use the new :func:`~django.contrib.admin.register` decorator to register a :class:`~django.contrib.admin.ModelAdmin`. :mod:`django.contrib.auth` ^^^^^^^^^^^^^^^^^^^^^^^^^^ Loading
tests/admin_registration/models.py +6 −0 Original line number Diff line number Diff line Loading @@ -8,9 +8,15 @@ from django.db import models class Person(models.Model): name = models.CharField(max_length=200) class Traveler(Person): pass class Location(models.Model): class Meta: abstract = True class Place(Location): name = models.CharField(max_length=200)