Changeset 986
- Timestamp:
- 10/20/05 18:27:27 (3 years ago)
- Files:
-
- django/branches/new-admin/django/contrib/admin/templates/admin/edit_inline_stacked.html (modified) (2 diffs)
- django/branches/new-admin/django/contrib/admin/templates/admin/edit_inline_tabular.html (modified) (3 diffs)
- django/branches/new-admin/django/contrib/admin/templatetags/admin_modify.py (modified) (5 diffs)
- django/branches/new-admin/django/core/meta/fields.py (modified) (1 diff)
- django/branches/new-admin/django/core/meta/__init__.py (modified) (5 diffs)
- django/branches/new-admin/django/core/template/__init__.py (modified) (1 diff)
- django/branches/new-admin/django/core/template/loaders/app_directories.py (modified) (1 diff)
- django/branches/new-admin/tests/runtests.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/new-admin/django/contrib/admin/templates/admin/edit_inline_stacked.html
r966 r986 1 1 <fieldset class="module aligned"> 2 {% for fcw in form_field_collection_wrapper_list%}3 <h2>{{ relation.opts.verbose_name|capfirst }} #{{ forloop.counter }}</h2>4 {% if fcw.show_url %}{% if fcw.obj.original %}2 {% for fcw in bound_related_object.form_field_collection_wrappers %} 3 <h2>{{ bound_related_object.relation.opts.verbose_name|capfirst }} #{{ forloop.counter }}</h2> 4 {% if bound_related_object.show_url %}{% if fcw.obj.original %} 5 5 <p><a href="/r/{{ fcw.obj.original.content_type_id }}/{{ fcw.obj.original.id }}/">View on site</a></p> 6 6 {% endif %}{% endif %} … … 14 14 {%endfor%} 15 15 </fieldset> 16 django/branches/new-admin/django/contrib/admin/templates/admin/edit_inline_tabular.html
r966 r986 1 1 <fieldset class="module"> 2 <h2>{{ relation.opts.verbose_name_plural|capfirst}}</h2><table>2 <h2>{{bound_related_object.relation.opts.verbose_name_plural|capfirst}}</h2><table> 3 3 <thead><tr> 4 {% for fw in field_wrapper_list %}4 {% for fw in bound_related_object.field_wrapper_list %} 5 5 {% if fw.needs_header %} 6 6 <th{{fw.header_class_attribute}}> {{fw.field.verbose_name|capfirst}} </th> 7 7 {% endif %} 8 8 {% endfor %} 9 {% for fcw in form_field_collection_wrapper_list%}9 {% for fcw in bound_related_object.form_field_collection_wrappers %} 10 10 11 11 {% if change %}{% if original_row_needed %} … … 27 27 {% endif %} 28 28 {% endfor %} 29 {% if fcw.show_url %}<td>29 {% if bound_related_object.show_url %}<td> 30 30 {% if fcw.obj.original %}<a href="/r/{{ fcw.obj.original.content_type_id }}/{{ fcw.obj.original.id }}/">View on site</a>{% endif %} 31 31 </td>{% endif %} … … 34 34 {% endfor %} </table> 35 35 36 {% for fcw in form_field_collection_wrapper_list %}36 {% for fcw in bound_related_object.form_field_collection_wrapper_list %} 37 37 {% for bound_field in fcw.bound_fields %} 38 38 {% if bound_field.not_in_table %} django/branches/new-admin/django/contrib/admin/templatetags/admin_modify.py
r966 r986 5 5 from django.utils.html import escape 6 6 from django.utils.functional import curry 7 8 7 from django.core.template.decorators import simple_tag, inclusion_tag 9 10 8 from django.contrib.admin.views.main import AdminBoundField 11 9 from django.core.meta.fields import BoundField, Field 10 from django.core.meta import BoundRelatedObject, TABULAR, STACKED 11 12 12 import re 13 13 … … 123 123 and self.field.rel.raw_id_admin 124 124 125 125 126 class FormFieldCollectionWrapper(object): 126 127 def __init__(self, field_mapping, fields): 127 128 self.field_mapping = field_mapping 128 129 self.fields = fields 129 self.bound_fields = [ AdminBoundField(field, self.field_mapping, field_mapping['original']) for field in self.fields ] 130 131 def showurl(self): 132 return False 130 self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original']) for field in self.fields ] 131 132 class TabularBoundRelatedObject(BoundRelatedObject): 133 def __init__(self, related_object, field_mapping, original): 134 super(TabularBoundRelatedObject, self).__init__(related_object, field_mapping, original) 135 self.field_wrapper_list = self.relation.editable_fields(FieldWrapper) 136 fields = self.relation.editable_fields() 137 self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields) 138 for field_mapping in self.field_mappings] 139 self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list]) 140 self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 141 142 def template_name(self): 143 return "admin/edit_inline_tabular" 144 145 class StackedBoundRelatedObject(BoundRelatedObject): 146 def __init__(self, related_object, field_mapping, original): 147 super(StackedBoundRelatedObject, self).__init__(related_object, field_mapping, original) 148 fields = self.relation.editable_fields() 149 self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields) 150 for field_mapping in self.field_mappings] 151 self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 152 153 def template_name(self): 154 return "admin/edit_inline_stacked" 155 156 bound_related_object_overrides = { 157 TABULAR : TabularBoundRelatedObject, 158 STACKED : StackedBoundRelatedObject 159 } 133 160 134 161 class EditInlineNode(template.Node): … … 138 165 def render(self, context): 139 166 relation = template.resolve_variable(self.rel_var, context) 140 add, change = context['add'], context['change'] 141 167 142 168 context.push() 143 169 144 self.fill_context(relation, add, change, context) 145 146 t = template_loader.get_template(relation.field.rel.edit_inline) 170 klass = relation.field.rel.edit_inline 171 bound_related_object_class = bound_related_object_overrides.get(klass, klass) 172 173 original = context.get('original', None) 174 175 bound_related_object = relation.bind(context['form'], original, bound_related_object_class) 176 context['bound_related_object'] = bound_related_object 177 178 t = template_loader.get_template( bound_related_object.template_name() ) 147 179 148 180 output = t.render(context) … … 150 182 context.pop() 151 183 return output 152 153 def fill_context(self, relation, add, change, context):154 field_wrapper_list = relation.editable_fields(FieldWrapper)155 156 var_name = relation.opts.object_name.lower()157 158 form = template.resolve_variable('form', context)159 form_field_collections = form[relation.opts.module_name]160 fields = relation.editable_fields()161 form_field_collection_wrapper_list = [FormFieldCollectionWrapper(field_mapping ,fields) for field_mapping in form_field_collections]162 163 context['field_wrapper_list'] = field_wrapper_list164 context['form_field_collection_wrapper_list'] = form_field_collection_wrapper_list165 context['num_headers'] = len(field_wrapper_list)166 context['original_row_needed'] = max([fw.use_raw_id_admin() for fw in field_wrapper_list])167 184 168 185 … … 202 219 if len(tokens) != 2: 203 220 raise template.TemplateSyntaxError("%s takes 1 argument" % tokens[0]) 204 return node_factory(tokens[1]) 221 return node_factory(tokens[1]) 205 222 206 223 django/branches/new-admin/django/core/meta/fields.py
r982 r986 17 17 18 18 # Values for Relation.edit_inline. 19 TABULAR, STACKED = "admin/edit_inline_tabular", "admin/edit_inline_stacked"19 TABULAR, STACKED = 1, 2 20 20 21 21 RECURSIVE_RELATIONSHIP_CONSTANT = 'self' django/branches/new-admin/django/core/meta/__init__.py
r982 r986 147 147 pass 148 148 149 149 class BoundRelatedObject(object): 150 def __init__(self,related_object, field_mapping, original): 151 self.relation = related_object 152 self.field_mappings = field_mapping[related_object.opts.module_name] 153 154 def template_name(self): 155 raise NotImplementedException 156 157 def __repr__(self): 158 return repr(self.__dict__) 159 150 160 class RelatedObject(object): 151 161 def __init__(self,parent_opts, opts, field): … … 250 260 251 261 return fields 252 253 class BoundRelatedObject(object):254 pass262 263 def bind(self, field_mapping, original, bound_related_object_class=BoundRelatedObject): 264 return bound_related_object_class(self, field_mapping, original) 255 265 256 266 class Options: … … 470 480 return self._ordered_objects 471 481 472 def has_field_type(self, field_type, follow ):482 def has_field_type(self, field_type, follow = None): 473 483 """ 474 484 Returns True if this object's admin form has at least one of the given … … 1755 1765 def manipulator_validator_unique_together(field_name_list, opts, self, field_data, all_data): 1756 1766 from django.utils.text import get_text_list 1767 1757 1768 field_list = [opts.get_field(field_name) for field_name in field_name_list] 1758 1769 if isinstance(field_list[0].rel, ManyToOne): … … 1761 1772 kwargs = {'%s__iexact' % field_name_list[0]: field_data} 1762 1773 for f in field_list[1:]: 1774 # This is really not going to work for fields that have different form fields, eg DateTime 1775 # This validation needs to occur after html2python to be effective. 1763 1776 field_val = all_data.get(f.column, None) 1764 1777 if field_val is None: django/branches/new-admin/django/core/template/__init__.py
r981 r986 196 196 return True 197 197 return False 198 199 def get(self, key, otherwise): 200 for dict in self.dicts: 201 if dict.has_key(key): 202 return dict[key] 203 return otherwise 198 204 199 205 def update(self, other_dict): django/branches/new-admin/django/core/template/loaders/app_directories.py
r982 r986 8 8 app_template_dirs = [] 9 9 for app in INSTALLED_APPS: 10 try: 11 i = app.rfind('.') 12 m, a = app[:i], app[i+1:] 13 mod = getattr(__import__(m, '', '', [a]), a) 14 template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates') 15 if os.path.isdir(template_dir): 16 app_template_dirs.append(template_dir) 17 except Exception, e: 18 print "exception loading" 19 print e 20 raise e 10 i = app.rfind('.') 11 m, a = app[:i], app[i+1:] 12 mod = getattr(__import__(m, '', '', [a]), a) 13 template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates') 14 if os.path.isdir(template_dir): 15 app_template_dirs.append(template_dir) 16 21 17 22 18 # It won't change, so convert it to a tuple to save memory. django/branches/new-admin/tests/runtests.py
r982 r986 101 101 try: 102 102 cursor.execute("CREATE DATABASE %s" % TEST_DATABASE_NAME) 103 print "created"104 103 except Exception, e: 105 104 self.output(0, "There was an error creating the test database:%s " % str(e))
