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:
parent
f664a284e7
commit
6505ae5c2f
@ -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]
|
||||
|
@ -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()]
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user