1
0
mirror of https://github.com/django/django.git synced 2025-04-22 00:04:43 +00:00

magic-removal: Collapsed BoundField, BoundFieldLine, FieldLine, BoundFieldSet, FieldSet and BoundManipulator to continue code simplification

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2093 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-01-21 05:54:36 +00:00
parent f664a284e7
commit 6505ae5c2f
4 changed files with 72 additions and 93 deletions

View File

@ -5,7 +5,7 @@ from django.utils.html import escape
from django.utils.text import capfirst
from django.utils.functional import curry
from django.db import models
from django.db.models.fields import BoundField, Field
from django.db.models.fields import Field
from django.db.models.related import BoundRelatedObject
from django.conf import settings
import re
@ -205,7 +205,7 @@ def edit_inline(parser, token):
edit_inline = register.tag(edit_inline)
def admin_field_line(context, argument_val):
if isinstance(argument_val, BoundField):
if isinstance(argument_val, AdminBoundField):
bound_fields = [argument_val]
else:
bound_fields = [bf for bf in argument_val]

View File

@ -6,7 +6,6 @@ from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, Per
from django.core.paginator import ObjectPaginator, InvalidPage
from django.shortcuts import get_object_or_404, render_to_response
from django.db import models
from django.db.models.fields import BoundField, BoundFieldLine, BoundFieldSet
from django.db.models.query import handle_legacy_orderlist
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.template import loader
@ -77,10 +76,11 @@ def get_javascript_imports(opts, auto_populated_fields, field_sets):
break
return js
class AdminBoundField(BoundField):
class AdminBoundField(object):
def __init__(self, field, field_mapping, original):
super(AdminBoundField, self).__init__(field, field_mapping, original)
self.field = field
self.original = original
self.form_fields = [field_mapping[name] for name in self.field.get_manipulator_field_names('')]
self.element_id = self.form_fields[0].get_id()
self.has_label_first = not isinstance(self.field, models.BooleanField)
self.raw_id_admin = use_raw_id_admin(field)
@ -102,6 +102,10 @@ class AdminBoundField(BoundField):
if field.rel:
self.related_url = '../../../%s/%s/' % (field.rel.to._meta.app_label, field.rel.to._meta.object_name.lower())
def original_value(self):
if self.original:
return self.original.__dict__[self.field.column]
def existing_display(self):
try:
return self._display
@ -125,18 +129,34 @@ class AdminBoundField(BoundField):
return url_method()
return ''
class AdminBoundFieldLine(BoundFieldLine):
class AdminBoundFieldLine(object):
def __init__(self, field_line, field_mapping, original):
super(AdminBoundFieldLine, self).__init__(field_line, field_mapping, original, AdminBoundField)
self.bound_fields = [field.bind(field_mapping, original, AdminBoundField) for field in field_line]
for bound_field in self:
bound_field.first = True
break
class AdminBoundFieldSet(BoundFieldSet):
def __init__(self, field_set, field_mapping, original):
super(AdminBoundFieldSet, self).__init__(field_set, field_mapping, original, AdminBoundFieldLine)
def __iter__(self):
for bound_field in self.bound_fields:
yield bound_field
class BoundManipulator(object):
def __len__(self):
return len(self.bound_fields)
class AdminBoundFieldSet(object):
def __init__(self, field_set, field_mapping, original):
self.name = field_set.name
self.classes = field_set.classes
self.bound_field_lines = [field_line.bind(field_mapping, original, AdminBoundFieldLine) for field_line in field_set]
def __iter__(self):
for bound_field_line in self.bound_field_lines:
yield bound_field_line
def __len__(self):
return len(self.bound_field_lines)
class AdminBoundManipulator(object):
def __init__(self, model, manipulator, field_mapping):
self.model = model
self.opts = model._meta
@ -144,10 +164,6 @@ class BoundManipulator(object):
self.original = getattr(manipulator, 'original_object', None)
self.bound_field_sets = [field_set.bind(field_mapping, self.original, AdminBoundFieldSet)
for field_set in self.opts.admin.get_field_sets(self.opts)]
class AdminBoundManipulator(BoundManipulator):
def __init__(self, model, manipulator, field_mapping):
super(AdminBoundManipulator, self).__init__(model, manipulator, field_mapping)
self.first_form_field_id = self.bound_field_sets[0].bound_field_lines[0].bound_fields[0].form_fields[0].get_id();
self.ordered_object_pk_names = [o.pk.name for o in self.opts.get_ordered_objects()]

View File

@ -36,19 +36,6 @@ def manipulator_validator_unique(f, opts, self, field_data, all_data):
return
raise validators.ValidationError, _("%(optname)s with this %(fieldname)s already exists.") % {'optname': capfirst(opts.verbose_name), 'fieldname': f.verbose_name}
class BoundField(object):
def __init__(self, field, field_mapping, original):
self.field = field
self.original = original
self.form_fields = [field_mapping[name] for name in self.field.get_manipulator_field_names('')]
def original_value(self):
if self.original:
return self.original.__dict__[self.field.column]
def __repr__(self):
return "BoundField:(%s, %s)" % (self.field.name, self.form_fields)
# A guide to Field parameters:
#
# * name: The name of the field specifed in the model.
@ -313,7 +300,7 @@ class Field(object):
else:
return self.editable
def bind(self, fieldmapping, original, bound_field_class=BoundField):
def bind(self, fieldmapping, original, bound_field_class):
return bound_field_class(self, fieldmapping, original)
class AutoField(Field):
@ -706,63 +693,3 @@ class OrderingField(IntegerField):
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
return [forms.HiddenField(name_prefix + self.name)]
class BoundFieldLine(object):
def __init__(self, field_line, field_mapping, original, bound_field_class=BoundField):
self.bound_fields = [field.bind(field_mapping, original, bound_field_class) for field in field_line]
def __iter__(self):
for bound_field in self.bound_fields:
yield bound_field
def __len__(self):
return len(self.bound_fields)
class FieldLine(object):
def __init__(self, field_locator_func, linespec):
if isinstance(linespec, basestring):
self.fields = [field_locator_func(linespec)]
else:
self.fields = [field_locator_func(field_name) for field_name in linespec]
def bind(self, field_mapping, original, bound_field_line_class=BoundFieldLine):
return bound_field_line_class(self, field_mapping, original)
def __iter__(self):
for field in self.fields:
yield field
def __len__(self):
return len(self.fields)
class BoundFieldSet(object):
def __init__(self, field_set, field_mapping, original, bound_field_line_class=BoundFieldLine):
self.name = field_set.name
self.classes = field_set.classes
self.bound_field_lines = [field_line.bind(field_mapping,original, bound_field_line_class) for field_line in field_set]
def __iter__(self):
for bound_field_line in self.bound_field_lines:
yield bound_field_line
def __len__(self):
return len(self.bound_field_lines)
class FieldSet(object):
def __init__(self, name, classes, field_locator_func, line_specs):
self.name = name
self.field_lines = [FieldLine(field_locator_func, line_spec) for line_spec in line_specs]
self.classes = classes
def __repr__(self):
return "FieldSet: (%s, %s)" % (self.name, self.field_lines)
def bind(self, field_mapping, original, bound_field_set_class=BoundFieldSet):
return bound_field_set_class(self, field_mapping, original)
def __iter__(self):
for field_line in self.field_lines:
yield field_line
def __len__(self):
return len(self.field_lines)

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, FieldSet
from django.db.models.fields import AutoField
from django.db.models.loading import get_installed_model_modules
from django.db.models.query import orderlist2sql
from django.db.models.exceptions import FieldDoesNotExist
@ -237,8 +237,44 @@ class AdminOptions:
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))
new_fieldset_list.append(AdminFieldSet(name, classes, opts.get_field, line_specs))
return new_fieldset_list
def contribute_to_class(self, cls, name):
cls._meta.admin = self
cls._meta.admin = self
class AdminFieldLine(object):
def __init__(self, field_locator_func, linespec):
if isinstance(linespec, basestring):
self.fields = [field_locator_func(linespec)]
else:
self.fields = [field_locator_func(field_name) for field_name in linespec]
def bind(self, field_mapping, original, bound_field_line_class):
return bound_field_line_class(self, field_mapping, original)
def __iter__(self):
for field in self.fields:
yield field
def __len__(self):
return len(self.fields)
class AdminFieldSet(object):
def __init__(self, name, classes, field_locator_func, line_specs):
self.name = name
self.field_lines = [AdminFieldLine(field_locator_func, line_spec) for line_spec in line_specs]
self.classes = classes
def __repr__(self):
return "FieldSet: (%s, %s)" % (self.name, self.field_lines)
def bind(self, field_mapping, original, bound_field_set_class):
return bound_field_set_class(self, field_mapping, original)
def __iter__(self):
for field_line in self.field_lines:
yield field_line
def __len__(self):
return len(self.field_lines)