Changeset 7736
- Timestamp:
- 06/24/08 14:44:31 (5 months ago)
- Files:
-
- django/branches/newforms-admin/django/contrib/admin/templates/widget/default.html (deleted)
- django/branches/newforms-admin/django/contrib/admin/templates/widget/file.html (deleted)
- django/branches/newforms-admin/django/contrib/admin/templates/widget/foreign.html (deleted)
- django/branches/newforms-admin/django/contrib/admin/templatetags/admin_modify.py (modified) (2 diffs)
- django/branches/newforms-admin/django/contrib/admin/urls.py (deleted)
- django/branches/newforms-admin/django/contrib/admin/views/main.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/newforms-admin/django/contrib/admin/templatetags/admin_modify.py
r7603 r7736 1 1 from django import template 2 from django.contrib.admin.views.main import AdminBoundField3 from django.template import loader4 from django.utils.text import capfirst5 from django.utils.encoding import force_unicode6 from django.db import models7 from django.db.models.fields import Field8 from django.db.models.related import BoundRelatedObject9 from django.conf import settings10 import re11 2 12 3 register = template.Library() 13 14 word_re = re.compile('[A-Z][a-z]+')15 16 def class_name_to_underscored(name):17 return u'_'.join([s.lower() for s in word_re.findall(name)[:-1]])18 4 19 5 def submit_row(context): … … 34 20 } 35 21 submit_row = register.inclusion_tag('admin/submit_line.html', takes_context=True)(submit_row) 36 37 class FieldWidgetNode(template.Node):38 nodelists = {}39 default = None40 41 def __init__(self, bound_field_var):42 self.bound_field_var = template.Variable(bound_field_var)43 44 def get_nodelist(cls, klass):45 if klass not in cls.nodelists:46 try:47 field_class_name = klass.__name__48 template_name = u"widget/%s.html" % class_name_to_underscored(field_class_name)49 nodelist = loader.get_template(template_name).nodelist50 except template.TemplateDoesNotExist:51 super_klass = bool(klass.__bases__) and klass.__bases__[0] or None52 if super_klass and super_klass != Field:53 nodelist = cls.get_nodelist(super_klass)54 else:55 if not cls.default:56 cls.default = loader.get_template("widget/default.html").nodelist57 nodelist = cls.default58 59 cls.nodelists[klass] = nodelist60 return nodelist61 else:62 return cls.nodelists[klass]63 get_nodelist = classmethod(get_nodelist)64 65 def render(self, context):66 bound_field = self.bound_field_var.resolve(context)67 68 context.push()69 context['bound_field'] = bound_field70 71 output = self.get_nodelist(bound_field.field.__class__).render(context)72 context.pop()73 return output74 75 class FieldWrapper(object):76 def __init__(self, field ):77 self.field = field78 79 def needs_header(self):80 return not isinstance(self.field, models.AutoField)81 82 def header_class_attribute(self):83 return self.field.blank and mark_safe(' class="optional"') or ''84 85 def use_raw_id_admin(self):86 return isinstance(self.field.rel, (models.ManyToOneRel, models.ManyToManyRel)) \87 and self.field.rel.raw_id_admin88 89 class FormFieldCollectionWrapper(object):90 def __init__(self, field_mapping, fields, index):91 self.field_mapping = field_mapping92 self.fields = fields93 self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original'])94 for field in self.fields]95 self.index = index96 97 def output_all(form_fields):98 return u''.join([force_unicode(f) for f in form_fields])99 output_all = register.simple_tag(output_all)100 101 def field_widget(parser, token):102 bits = token.contents.split()103 if len(bits) != 2:104 raise template.TemplateSyntaxError, "%s takes 1 argument" % bits[0]105 return FieldWidgetNode(bits[1])106 field_widget = register.tag(field_widget)django/branches/newforms-admin/django/contrib/admin/views/main.py
r7492 r7736 1 from django import template2 1 from django.contrib.admin.filterspecs import FilterSpec 3 2 from django.contrib.admin.options import IncorrectLookupParameters 4 from django.contrib.admin.views.decorators import staff_member_required5 from django.views.decorators.cache import never_cache6 3 from django.core.paginator import QuerySetPaginator, InvalidPage 7 from django.shortcuts import render_to_response8 4 from django.db import models 9 5 from django.db.models.query import QuerySet 10 from django.http import Http40411 6 from django.utils.encoding import force_unicode, smart_str 12 7 from django.utils.translation import ugettext … … 34 29 # Text to display within change-list table cells if the value is blank. 35 30 EMPTY_CHANGELIST_VALUE = '(None)' 36 37 use_raw_id_admin = lambda field: isinstance(field.rel, (models.ManyToOneRel, models.ManyToManyRel)) and field.rel.raw_id_admin38 31 39 32 def quote(s): … … 52 45 res[i] = '_%02X' % ord(c) 53 46 return ''.join(res) 54 55 def model_admin_view(request, app_label, model_name, rest_of_url):56 model = models.get_model(app_label, model_name)57 if model is None:58 raise Http404("App %r, model %r, not found" % (app_label, model_name))59 if not model._meta.admin:60 raise Http404("This object has no admin interface.")61 mav = model._meta.admin(model)62 return mav(request, rest_of_url)63 model_admin_view = staff_member_required(never_cache(model_admin_view))64 65 class AdminBoundField(object):66 def __init__(self, field, field_mapping, original):67 self.field = field68 self.original = original69 self.form_fields = [field_mapping[name] for name in self.field.get_manipulator_field_names('')]70 self.has_label_first = not isinstance(self.field, models.BooleanField)71 self.raw_id_admin = use_raw_id_admin(field)72 self.is_date_time = isinstance(field, models.DateTimeField)73 self.is_file_field = isinstance(field, models.FileField)74 self.hidden = isinstance(self.field, models.AutoField)75 self.first = False76 77 classes = []78 if self.raw_id_admin:79 classes.append(u'nowrap')80 if max([bool(f.errors()) for f in self.form_fields]):81 classes.append(u'error')82 if classes:83 self.cell_class_attribute = u' class="%s" ' % ' '.join(classes)84 self._repr_filled = False85 86 def original_value(self):87 if self.original:88 return self.original.__dict__[self.field.attname]89 90 def existing_display(self):91 try:92 return self._display93 except AttributeError:94 if isinstance(self.field.rel, models.ManyToOneRel):95 self._display = force_unicode(getattr(self.original, self.field.name), strings_only=True)96 elif isinstance(self.field.rel, models.ManyToManyRel):97 self._display = u", ".join([force_unicode(obj) for obj in getattr(self.original, self.field.name).all()])98 return self._display99 100 def __repr__(self):101 return repr(self.__dict__)102 103 def html_error_list(self):104 return mark_safe(" ".join([form_field.html_error_list() for form_field in self.form_fields if form_field.errors]))105 106 def original_url(self):107 if self.is_file_field and self.original and self.field.attname:108 url_method = getattr(self.original, 'get_%s_url' % self.field.attname)109 if callable(url_method):110 return url_method()111 return ''112 113 def index(request):114 return render_to_response('admin/index.html', {'title': ugettext('Site administration')}, context_instance=template.RequestContext(request))115 index = staff_member_required(never_cache(index))116 117 47 118 48 class ChangeList(object):
