mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +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.text import capfirst
|
||||||
from django.utils.functional import curry
|
from django.utils.functional import curry
|
||||||
from django.db import models
|
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.db.models.related import BoundRelatedObject
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import re
|
import re
|
||||||
@ -205,7 +205,7 @@ def edit_inline(parser, token):
|
|||||||
edit_inline = register.tag(edit_inline)
|
edit_inline = register.tag(edit_inline)
|
||||||
|
|
||||||
def admin_field_line(context, argument_val):
|
def admin_field_line(context, argument_val):
|
||||||
if isinstance(argument_val, BoundField):
|
if isinstance(argument_val, AdminBoundField):
|
||||||
bound_fields = [argument_val]
|
bound_fields = [argument_val]
|
||||||
else:
|
else:
|
||||||
bound_fields = [bf for bf in argument_val]
|
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.core.paginator import ObjectPaginator, InvalidPage
|
||||||
from django.shortcuts import get_object_or_404, render_to_response
|
from django.shortcuts import get_object_or_404, render_to_response
|
||||||
from django.db import models
|
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.db.models.query import handle_legacy_orderlist
|
||||||
from django.http import Http404, HttpResponse, HttpResponseRedirect
|
from django.http import Http404, HttpResponse, HttpResponseRedirect
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
@ -77,10 +76,11 @@ def get_javascript_imports(opts, auto_populated_fields, field_sets):
|
|||||||
break
|
break
|
||||||
return js
|
return js
|
||||||
|
|
||||||
class AdminBoundField(BoundField):
|
class AdminBoundField(object):
|
||||||
def __init__(self, field, field_mapping, original):
|
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.element_id = self.form_fields[0].get_id()
|
||||||
self.has_label_first = not isinstance(self.field, models.BooleanField)
|
self.has_label_first = not isinstance(self.field, models.BooleanField)
|
||||||
self.raw_id_admin = use_raw_id_admin(field)
|
self.raw_id_admin = use_raw_id_admin(field)
|
||||||
@ -102,6 +102,10 @@ class AdminBoundField(BoundField):
|
|||||||
if field.rel:
|
if field.rel:
|
||||||
self.related_url = '../../../%s/%s/' % (field.rel.to._meta.app_label, field.rel.to._meta.object_name.lower())
|
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):
|
def existing_display(self):
|
||||||
try:
|
try:
|
||||||
return self._display
|
return self._display
|
||||||
@ -125,18 +129,34 @@ class AdminBoundField(BoundField):
|
|||||||
return url_method()
|
return url_method()
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
class AdminBoundFieldLine(BoundFieldLine):
|
class AdminBoundFieldLine(object):
|
||||||
def __init__(self, field_line, field_mapping, original):
|
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:
|
for bound_field in self:
|
||||||
bound_field.first = True
|
bound_field.first = True
|
||||||
break
|
break
|
||||||
|
|
||||||
class AdminBoundFieldSet(BoundFieldSet):
|
def __iter__(self):
|
||||||
def __init__(self, field_set, field_mapping, original):
|
for bound_field in self.bound_fields:
|
||||||
super(AdminBoundFieldSet, self).__init__(field_set, field_mapping, original, AdminBoundFieldLine)
|
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):
|
def __init__(self, model, manipulator, field_mapping):
|
||||||
self.model = model
|
self.model = model
|
||||||
self.opts = model._meta
|
self.opts = model._meta
|
||||||
@ -144,10 +164,6 @@ class BoundManipulator(object):
|
|||||||
self.original = getattr(manipulator, 'original_object', None)
|
self.original = getattr(manipulator, 'original_object', None)
|
||||||
self.bound_field_sets = [field_set.bind(field_mapping, self.original, AdminBoundFieldSet)
|
self.bound_field_sets = [field_set.bind(field_mapping, self.original, AdminBoundFieldSet)
|
||||||
for field_set in self.opts.admin.get_field_sets(self.opts)]
|
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.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()]
|
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
|
return
|
||||||
raise validators.ValidationError, _("%(optname)s with this %(fieldname)s already exists.") % {'optname': capfirst(opts.verbose_name), 'fieldname': f.verbose_name}
|
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:
|
# A guide to Field parameters:
|
||||||
#
|
#
|
||||||
# * name: The name of the field specifed in the model.
|
# * name: The name of the field specifed in the model.
|
||||||
@ -313,7 +300,7 @@ class Field(object):
|
|||||||
else:
|
else:
|
||||||
return self.editable
|
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)
|
return bound_field_class(self, fieldmapping, original)
|
||||||
|
|
||||||
class AutoField(Field):
|
class AutoField(Field):
|
||||||
@ -706,63 +693,3 @@ class OrderingField(IntegerField):
|
|||||||
|
|
||||||
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
|
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
|
||||||
return [forms.HiddenField(name_prefix + self.name)]
|
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.related import RelatedObject
|
||||||
from django.db.models.fields.related import ManyToMany
|
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.loading import get_installed_model_modules
|
||||||
from django.db.models.query import orderlist2sql
|
from django.db.models.query import orderlist2sql
|
||||||
from django.db.models.exceptions import FieldDoesNotExist
|
from django.db.models.exceptions import FieldDoesNotExist
|
||||||
@ -237,8 +237,44 @@ class AdminOptions:
|
|||||||
fs_options = fieldset[1]
|
fs_options = fieldset[1]
|
||||||
classes = fs_options.get('classes', ())
|
classes = fs_options.get('classes', ())
|
||||||
line_specs = fs_options['fields']
|
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
|
return new_fieldset_list
|
||||||
|
|
||||||
def contribute_to_class(self, cls, name):
|
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