Moved admin options into inner "class Admin." Also refactored the model code so

that models.fields.Admin became models.options.AdminOptions.  This means that
old code that uses "admin = models.Admin()" will now break until it's replaced
with the new syntax.

(You can still use "admin = meta.AdminOptions(...)" if you care to, but I don't
see why.)


git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1864 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2006-01-08 15:56:51 +00:00
parent 8c07571a15
commit 1b0ccdce17
10 changed files with 83 additions and 89 deletions

View File

@ -26,9 +26,8 @@ class Group(models.Model):
verbose_name = _('Group')
verbose_name_plural = _('Groups')
ordering = ('name',)
admin = models.Admin(
search_fields = ('name',),
)
class Admin:
search_fields = ('name',)
def __repr__(self):
return self.name
@ -69,18 +68,17 @@ class User(models.Model):
verbose_name_plural = _('Users')
ordering = ('username',)
exceptions = ('SiteProfileNotAvailable',)
admin = models.Admin(
fields = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
),
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff'),
list_filter = ('is_staff', 'is_superuser'),
search_fields = ('username', 'first_name', 'last_name', 'email'),
class Admin:
fields = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
list_filter = ('is_staff', 'is_superuser')
search_fields = ('username', 'first_name', 'last_name', 'email')
def __repr__(self):
return self.username

View File

@ -91,18 +91,17 @@ class Comment(models.Model):
verbose_name = _('Comment')
verbose_name_plural = _('Comments')
ordering = ('-submit_date',)
admin = models.Admin(
fields = (
(None, {'fields': ('content_type', 'object_id', 'site')}),
('Content', {'fields': ('user', 'headline', 'comment')}),
('Ratings', {'fields': ('rating1', 'rating2', 'rating3', 'rating4', 'rating5', 'rating6', 'rating7', 'rating8', 'valid_rating')}),
('Meta', {'fields': ('is_public', 'is_removed', 'ip_address')}),
),
list_display = ('user', 'submit_date', 'content_type', 'get_content_object'),
list_filter = ('submit_date',),
date_hierarchy = 'submit_date',
search_fields = ('comment', 'user__username'),
class Admin:
fields = (
(None, {'fields': ('content_type', 'object_id', 'site')}),
('Content', {'fields': ('user', 'headline', 'comment')}),
('Ratings', {'fields': ('rating1', 'rating2', 'rating3', 'rating4', 'rating5', 'rating6', 'rating7', 'rating8', 'valid_rating')}),
('Meta', {'fields': ('is_public', 'is_removed', 'ip_address')}),
)
list_display = ('user', 'submit_date', 'content_type', 'get_content_object')
list_filter = ('submit_date',)
date_hierarchy = 'submit_date'
search_fields = ('comment', 'user__username')
def __repr__(self):
return "%s: %s..." % (self.get_user().username, self.comment[:100])
@ -179,17 +178,16 @@ class FreeComment(models.Model):
verbose_name = _('Free comment')
verbose_name_plural = _('Free comments')
ordering = ('-submit_date',)
admin = models.Admin(
fields = (
(None, {'fields': ('content_type', 'object_id', 'site')}),
('Content', {'fields': ('person_name', 'comment')}),
('Meta', {'fields': ('submit_date', 'is_public', 'ip_address', 'approved')}),
),
list_display = ('person_name', 'submit_date', 'content_type', 'get_content_object'),
list_filter = ('submit_date',),
date_hierarchy = 'submit_date',
search_fields = ('comment', 'person_name'),
class Admin:
fields = (
(None, {'fields': ('content_type', 'object_id', 'site')}),
('Content', {'fields': ('person_name', 'comment')}),
('Meta', {'fields': ('submit_date', 'is_public', 'ip_address', 'approved')}),
)
list_display = ('person_name', 'submit_date', 'content_type', 'get_content_object')
list_filter = ('submit_date',)
date_hierarchy = 'submit_date'
search_fields = ('comment', 'person_name')
def __repr__(self):
return "%s: %s..." % (self.person_name, self.comment[:100])

View File

@ -18,14 +18,13 @@ class FlatPage(models.Model):
verbose_name = _('flat page')
verbose_name_plural = _('flat pages')
ordering = ('url',)
admin = models.Admin(
fields = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
('Advanced options', {'classes': 'collapse', 'fields': ('enable_comments', 'registration_required', 'template_name')}),
),
list_filter = ('sites',),
search_fields = ('url', 'title'),
class Admin:
fields = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
('Advanced options', {'classes': 'collapse', 'fields': ('enable_comments', 'registration_required', 'template_name')}),
)
list_filter = ('sites',)
search_fields = ('url', 'title')
def __repr__(self):
return "%s -- %s" % (self.url, self.title)

View File

@ -14,10 +14,9 @@ class Redirect(models.Model):
db_table = 'django_redirects'
unique_together=(('site', 'old_path'),)
ordering = ('old_path',)
admin = models.Admin(
list_filter = ('site',),
search_fields = ('old_path', 'new_path'),
)
class Admin:
list_filter = ('site',)
search_fields = ('old_path', 'new_path')
def __repr__(self):
return "%s ---> %s" % (self.old_path, self.new_path)

View File

@ -14,10 +14,9 @@ class Site(models.Model):
verbose_name = _('site')
verbose_name_plural = _('sites')
ordering = ('domain',)
admin = models.Admin(
list_display = ('domain', 'name'),
search_fields = ('domain', 'name'),
)
class Admin:
list_display = ('domain', 'name')
search_fields = ('domain', 'name')
def __repr__(self):
return self.domain

View File

@ -806,8 +806,8 @@ def get_validation_errors(outfile):
# Check admin attribute.
if opts.admin is not None:
if not isinstance(opts.admin, models.Admin):
e.add(opts, '"admin" attribute, if given, must be set to a models.Admin() instance.')
if not isinstance(opts.admin, models.AdminOptions):
e.add(opts, '"admin" attribute, if given, must be set to a models.AdminOptions() instance.')
else:
# list_display
if not isinstance(opts.admin.list_display, (list, tuple)):

View File

@ -9,7 +9,7 @@ from django.utils.text import capfirst
from django.db.models.loading import get_installed_models, get_installed_model_modules
from django.db.models.query import Q
from django.db.models.manager import Manager
from django.db.models.base import Model
from django.db.models.base import Model, AdminOptions
from django.db.models.fields import *
from django.db.models.fields.related import *

View File

@ -1,10 +1,10 @@
import django.db.models.manipulators
import django.db.models.manager
from django.db.models.fields import AutoField, ImageField, Admin
from django.db.models.fields import AutoField, ImageField
from django.db.models.fields.related import OneToOne, ManyToOne
from django.db.models.related import RelatedObject
from django.db.models.query import orderlist2sql
from django.db.models.options import Options
from django.db.models.options import Options, AdminOptions
from django.db import connection, backend
from django.db.models import signals
from django.dispatch import dispatcher
@ -20,7 +20,7 @@ import os
if not hasattr(__builtins__, 'set'):
from sets import Set as set
attribute_transforms = {'Admin': lambda cls: Admin(**cls.__dict__)}
attribute_transforms = {'Admin': lambda cls: AdminOptions(**dict([(k,v) for (k,v) in cls.__dict__.items() if not k.startswith('_')]))}
class ModelBase(type):
"Metaclass for all models"

View File

@ -790,35 +790,3 @@ class FieldSet(object):
def __len__(self):
return len(self.field_lines)
class Admin:
def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None,
save_as=False, ordering=None, search_fields=None, save_on_top=False, list_select_related=False):
self.fields = fields
self.js = js or []
self.list_display = list_display or ['__repr__']
self.list_filter = list_filter or []
self.date_hierarchy = date_hierarchy
self.save_as, self.ordering = save_as, ordering
self.search_fields = search_fields or []
self.save_on_top = save_on_top
self.list_select_related = list_select_related
def get_field_sets(self, opts):
if self.fields is None:
field_struct = ((None, {
'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)]
}),)
else:
field_struct = self.fields
new_fieldset_list = []
for fieldset in field_struct:
name = fieldset[0]
fs_options = fieldset[1]
classes = fs_options.get('classes', ())
line_specs = fs_options['fields']
new_fieldset_list.append(FieldSet(name, classes, opts.get_field, line_specs))
return new_fieldset_list
def contribute_to_class(self, cls, name):
cls._meta.admin = self

View File

@ -1,6 +1,6 @@
from django.db.models.related import RelatedObject
from django.db.models.fields.related import ManyToMany
from django.db.models.fields import AutoField
from django.db.models.fields import AutoField, FieldSet
from django.db.models.loading import get_installed_model_modules
from django.db.models.query import orderlist2sql
from django.db.models.exceptions import FieldDoesNotExist
@ -216,3 +216,36 @@ class Options:
else:
self._field_types[field_type] = False
return self._field_types[field_type]
class AdminOptions:
def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None,
save_as=False, ordering=None, search_fields=None, save_on_top=False, list_select_related=False):
self.fields = fields
self.js = js or []
self.list_display = list_display or ['__repr__']
self.list_filter = list_filter or []
self.date_hierarchy = date_hierarchy
self.save_as, self.ordering = save_as, ordering
self.search_fields = search_fields or []
self.save_on_top = save_on_top
self.list_select_related = list_select_related
def get_field_sets(self, opts):
if self.fields is None:
field_struct = ((None, {
'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)]
}),)
else:
field_struct = self.fields
new_fieldset_list = []
for fieldset in field_struct:
name = fieldset[0]
fs_options = fieldset[1]
classes = fs_options.get('classes', ())
line_specs = fs_options['fields']
new_fieldset_list.append(FieldSet(name, classes, opts.get_field, line_specs))
return new_fieldset_list
def contribute_to_class(self, cls, name):
cls._meta.admin = self