Changeset 802
- Timestamp:
- 10/08/05 09:28:21 (3 years ago)
- Files:
-
- django/branches/new-admin/django/conf/admin_templates/admin_change_form.html (modified) (1 diff)
- django/branches/new-admin/django/conf/admin_templates/admin_edit_inline_stacked.html (modified) (1 diff)
- django/branches/new-admin/django/conf/admin_templates/admin_field_line.html (moved) (moved from django/branches/new-admin/django/conf/admin_templates/admin_field.html) (3 diffs)
- django/branches/new-admin/django/conf/admin_templates/admin_field_widget.html (deleted)
- django/branches/new-admin/django/core/meta/fields.py (modified) (3 diffs)
- django/branches/new-admin/django/core/template.py (modified) (2 diffs)
- django/branches/new-admin/django/templatetags/admin_modify.py (modified) (8 diffs)
- django/branches/new-admin/django/views/admin/main.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/new-admin/django/conf/admin_templates/admin_change_form.html
r780 r802 51 51 <b> 52 52 </b> 53 {% for fieldset in admin_fieldsets %}54 <fieldset class="module aligned {{ fieldset.classes }}">55 {% if fieldset.name %}56 <h2>{{ fieldset.name }}</h2>53 {% for bound_field_set in bound_field_sets %} 54 <fieldset class="module aligned {{ bound_field_set.classes }}"> 55 {% if bound_field_set.name %} 56 <h2>{{bound_field_set.name }}</h2> 57 57 {% endif %} 58 {% for bound_field_ set in fieldset.bound_field_sets%}59 {% for bound_field in bound_field_set%}60 {% admin_field_bound bound_field%}58 {% for bound_field_line in bound_field_set %} 59 {% admin_field_line bound_field_line %} 60 {% for bound_field in bound_field_line %} 61 61 {% filter_interface_script_maybe bound_field %} 62 {% endfor %} 62 {% endfor %} 63 63 {% endfor %} 64 64 </fieldset> django/branches/new-admin/django/conf/admin_templates/admin_edit_inline_stacked.html
r740 r802 9 9 {% field_widget bound_field %} 10 10 {% else %} 11 {% admin_field_ boundbound_field %}11 {% admin_field_line bound_field %} 12 12 {% endif %} 13 13 {% endfor %} django/branches/new-admin/django/conf/admin_templates/admin_field_line.html
r740 r802 1 <div class="{{ class_names }}" >1 <div class="{{ class_names }}" > 2 2 {% for bound_field in bound_fields %} 3 3 {{ bound_field.html_error_list }} 4 4 {% endfor %} 5 5 6 6 {% for bound_field in bound_fields %} 7 7 {% if bound_field.has_label_first %} … … 17 17 {% if change %} 18 18 {% if bound_field.field.primary_key %} 19 {{ bound_field.original_value }}20 {% endif %}19 {{ bound_field.original_value }} 20 {% endif %} 21 21 22 22 {% if bound_field.raw_id_admin %} … … 32 32 </p> 33 33 {% endif %} 34 34 35 {% endfor %} 35 36 36 </div> django/branches/new-admin/django/core/meta/fields.py
r773 r802 787 787 self.raw_id_admin = raw_id_admin 788 788 789 790 791 class BoundField(object): 792 def __init__(self, field, field_mapping, original): 793 self.field = field 794 self.form_fields = self.resolve_form_fields(field_mapping) 795 self.original = original 796 797 def resolve_form_fields(self, field_mapping): 798 return [field_mapping[name] for name in self.field.get_manipulator_field_names('')] 799 800 def as_field_list(self): 801 return [self.field] 802 803 def original_value(self): 804 return self.original.__dict__[self.field.name] 805 806 def __repr__(self): 807 return "BoundField:(%s, %s)" %( self.field.name, self.form_fields) 808 809 class BoundFieldLine(object): 810 def __init__(self, field_line, field_mapping, original, bound_field_class=BoundField): 811 self.bound_fields = [bound_field_class(field, field_mapping, original) for field in field_line] 812 813 def __iter__(self): 814 for bound_field in self.bound_fields: 815 yield bound_field 816 817 def __repr__(self): 818 return "%s:(%s)" % (self.__class__.__name__, self.bound_fields) 819 820 def __len__(self): 821 return len(self.bound_fields) 822 823 class FieldLine(object): 824 def __init__(self, linespec, field_locator_func): 825 if isinstance(linespec, basestring): 826 self.fields = [field_locator_func(linespec)] 827 else: 828 self.fields = [field_locator_func(field_name) for field_name in linespec] 829 830 def bind(self, field_mapping, original, bound_field_line_class=BoundFieldLine): 831 return bound_field_line_class(self, field_mapping, original) 832 833 def __iter__(self): 834 for field in self.fields: 835 yield field 836 837 def __len__(self): 838 return len(self.fields) 839 840 class BoundFieldSet(object): 841 def __init__(self, field_set, field_mapping, original, bound_field_line_class=BoundFieldLine): 842 self.name = field_set.name 843 self.classes = field_set.classes 844 self.bound_field_lines = [ field_line.bind(field_mapping,original, bound_field_line_class) 845 for field_line in field_set] 846 def __repr__(self): 847 return "%s:(%s,%s)" % (self.__class__.__name__, self.name, self.bound_field_lines) 848 849 def __iter__(self): 850 for bound_field_line in self.bound_field_lines: 851 yield bound_field_line 852 853 def __len__(self): 854 return len(self.bound_field_lines) 855 856 class FieldSet(object): 857 def __init__(self, name, classes, field_lines): 858 self.name = name 859 self.field_lines = field_lines 860 self.classes = classes 861 862 def __repr__(self): 863 return "FieldSet:(%s,%s)" % (self.name, self.field_lines) 864 865 def bind(self, field_mapping, original, bound_field_set_class=BoundFieldSet): 866 return bound_field_set_class(self, field_mapping, original) 867 868 def __iter__(self): 869 for field_line in self.field_lines: 870 yield field_line 871 872 def __len__(self): 873 return len(self.field_lines) 874 875 789 876 class Admin: 790 877 def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None, … … 809 896 fields is a list of subclasses of Field. 810 897 811 Return value needs to be encapsulated.898 TODO:Return value needs to be encapsulated. 812 899 """ 813 900 if self.fields is None: … … 828 915 new_fieldset_list.append(new_fieldset) 829 916 return new_fieldset_list 917 918 def get_field_sets(self, opts): 919 if self.fields is None: 920 field_struct = ((None, { 921 'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)] 922 }),) 923 else: 924 field_struct = self.fields 925 926 927 new_fieldset_list = [] 928 for fieldset in field_struct: 929 name = fieldset[0] 930 fs_options = fieldset[1] 931 classes = fs_options.get('classes', None) 932 line_specs = fs_options['fields'] 933 field_lines = [FieldLine(line_spec, opts.get_field) for line_spec in line_specs] 934 new_fieldset_list.append(FieldSet(name, classes, field_lines) ) 935 return new_fieldset_list 936 django/branches/new-admin/django/core/template.py
r796 r802 114 114 "Compilation stage" 115 115 self.nodelist = compile_string(template_string, filename) 116 from pprint import pprint, pformat 117 print "------------------------" 118 print filename 119 pprint(self.nodelist) 120 print "------------------------" 116 121 117 122 def __iter__(self): … … 213 218 while linebreaks and line != lastline and linebreaks[line] <= upto: 214 219 line += 1 220 221 last_bit = template_string[upto:] 222 if len(last_bit): 223 token_tups.append( (last_bit, line) ) 224 215 225 216 226 return [ create_token(tok, (filename, line)) for tok, line in token_tups] django/branches/new-admin/django/templatetags/admin_modify.py
r783 r802 9 9 10 10 from django.views.admin.main import AdminBoundField 11 from django.core.meta.fields import BoundField 11 12 import re 12 13 … … 25 26 #@inclusion_tag('admin_submit_line', takes_context=True) 26 27 def submit_row(context): 27 change = context['change']28 add = context['add']29 show_delete = context['show_delete']30 ordered_objects = context['ordered_objects']31 save_as = context['save_as']32 has_delete_permission = context['has_delete_permission']33 is_popup = context['is_popup']34 35 return {36 'onclick_attrib' : (ordered_objects and change37 and 'onclick="submitOrderForm();"' or ''),38 'show_delete_link' : (not is_popup and has_delete_permission39 and (change or show_delete)),40 'show_save_as_new' : not is_popup and change and save_as,41 'show_save_and_add_another': not is_popup and (not save_as or add),42 'show_save_and_continue': not is_popup,43 'show_save': True44 }28 change = context['change'] 29 add = context['add'] 30 show_delete = context['show_delete'] 31 ordered_objects = context['ordered_objects'] 32 save_as = context['save_as'] 33 has_delete_permission = context['has_delete_permission'] 34 is_popup = context['is_popup'] 35 36 return { 37 'onclick_attrib' : (ordered_objects and change 38 and 'onclick="submitOrderForm();"' or ''), 39 'show_delete_link' : (not is_popup and has_delete_permission 40 and (change or show_delete)), 41 'show_save_as_new' : not is_popup and change and save_as, 42 'show_save_and_add_another': not is_popup and (not save_as or add), 43 'show_save_and_continue': not is_popup, 44 'show_save': True 45 } 45 46 46 47 srdec = inclusion_tag('admin_submit_line', takes_context=True) … … 119 120 120 121 class FormFieldCollectionWrapper(object): 121 def __init__(self, obj, fields):122 self. obj = obj122 def __init__(self, field_mapping, fields): 123 self.field_mapping = field_mapping 123 124 self.fields = fields 124 self.bound_fields = [ AdminBoundField(field, obj['original'], True, self.obj) for field in self.fields ]125 self.bound_fields = [ AdminBoundField(field, self.field_mapping, field_mapping['original']) for field in self.fields ] 125 126 126 127 def showurl(self): … … 146 147 return output 147 148 148 149 149 def fill_context(self, relation, add, change, context): 150 150 field_wrapper_list = relation.editable_fields(FieldWrapper) … … 155 155 form_field_collections = form[relation.opts.module_name] 156 156 fields = relation.editable_fields() 157 form_field_collection_wrapper_list = [FormFieldCollectionWrapper( o,fields) for oin form_field_collections]157 form_field_collection_wrapper_list = [FormFieldCollectionWrapper(field_mapping ,fields) for field_mapping in form_field_collections] 158 158 159 159 context['field_wrapper_list'] = field_wrapper_list … … 161 161 context['num_headers'] = len(field_wrapper_list) 162 162 context['original_row_needed'] = max([fw.use_raw_id_admin() for fw in field_wrapper_list]) 163 # context['name_prefix'] = "%s." % (var_name,)164 163 165 164 … … 216 215 register_one_arg_tag(node) 217 216 218 219 #@inclusion_tag('admin_field ', takes_context=True)220 def admin_field_ bound(context, argument_val):221 if (isinstance(argument_val, list)):222 bound_fields = argument_val217 218 #@inclusion_tag('admin_field_line', takes_context=True) 219 def admin_field_line(context, argument_val): 220 if (isinstance(argument_val, BoundField)): 221 bound_fields = [argument_val] 223 222 else: 224 bound_fields = [ argument_val]223 bound_fields = [bf for bf in argument_val] 225 224 add = context['add'] 226 225 change = context['change'] … … 237 236 class_names.append('checkbox-row') 238 237 239 return { 238 return { 240 239 'add' : context['add'], 241 240 'change' : context['change'], 242 241 'bound_fields' : bound_fields, 243 242 'class_names' : " ".join(class_names) 244 } 245 246 247 afbdec = inclusion_tag('admin_field ', takes_context=True)248 admin_field_ bound = afbdec(admin_field_bound)249 250 243 } 244 245 246 afbdec = inclusion_tag('admin_field_line', takes_context=True) 247 admin_field_line = afbdec(admin_field_line) 248 249 django/branches/new-admin/django/views/admin/main.py
r796 r802 2 2 3 3 from django.core import formfields, meta, template_loader, template 4 from django.core.meta.fields import BoundField, BoundFieldLine, BoundFieldSet 4 5 from django.core.exceptions import Http404, ObjectDoesNotExist, PermissionDenied 5 6 from django.core.extensions import DjangoContext as Context … … 540 541 return js 541 542 542 class BoundField(object): 543 def __init__(self, field, original, rel, field_mapping): 544 self.field = field 545 self.form_fields = self.resolve_form_fields(field_mapping) 546 self.original = original 547 self.rel = rel 548 549 def resolve_form_fields(self, field_mapping): 550 return [field_mapping[name] for name in self.field.get_manipulator_field_names('')] 551 552 def as_field_list(self): 553 return [self.field] 554 555 def original_value(self): 556 return self.original.__dict__[self.field.name] 557 543 558 544 class AdminBoundField(BoundField): 559 def __init__(self, field, original, rel, field_mapping):560 super(AdminBoundField, self).__init__(field, original, rel, field_mapping)545 def __init__(self, field, field_mapping, original): 546 super(AdminBoundField, self).__init__(field,field_mapping,original) 561 547 562 548 self.element_id = self.form_fields[0].get_id() … … 578 564 self._repr_filled = False 579 565 580 581 582 566 def _fetch_existing_repr(self, func_name): 583 567 class_dict = self.original.__class__.__dict__ … … 592 576 func_name = 'get_%s' % self.field.name 593 577 self._repr = self._fetch_existing_repr(func_name) 594 elif isinstance(self.field.rel, meta.ManyToMany):595 func_name = 'get_%s_list' % self.field.name596 self._repr = ",".join(self._fetch_existing_repr(func_name))578 elif isinstance(self.field.rel, meta.ManyToMany): 579 func_name = 'get_%s_list' % self.field.name 580 self._repr = ",".join(self._fetch_existing_repr(func_name)) 597 581 self._repr_filled = True 598 582 … … 608 592 609 593 610 class AdminFieldSet(object): 611 def __init__(self, fieldset_name, options, form, original): 612 self.name = fieldset_name 613 self.options = options 614 self.bound_field_sets = self.get_bound_field_sets(form, original) 615 self.classes = options.get('classes', '') 616 617 def __repr__(self): 618 return "Fieldset:(%s,%s)" % (self.name, self.bound_field_sets) 619 620 def get_bound_field_sets(self, form, original): 621 fields = self.options['fields'] 622 bound_field_sets = [ [AdminBoundField(f, original, False, form) for f in field ] for field in fields] 623 for set in bound_field_sets: 624 first = True 625 for bound_field in set: 626 bound_field.first = first 627 first = False 628 629 return bound_field_sets 630 594 class AdminBoundFieldLine(BoundFieldLine): 595 def __init__(self, field_line, field_mapping, original): 596 super(AdminBoundFieldLine, self).__init__(field_line, field_mapping, original, AdminBoundField) 597 for bound_field in self: 598 bound_field.first = True 599 break 600 601 class AdminBoundFieldSet(BoundFieldSet): 602 def __init__(self, field_set, field_mapping, original): 603 super(AdminBoundFieldSet, self).__init__(field_set, field_mapping, original, AdminBoundFieldLine) 604 605 631 606 def fill_extra_context(opts, app_label, context, add=False, change=False, show_delete=False, form_url=''): 632 607 admin_field_objs = opts.admin.get_field_objs(opts) … … 634 609 auto_populated_fields = [f for f in opts.fields if f.prepopulate_from] 635 610 636 javascript_imports = get_javascript_imports(opts, auto_populated_fields, ordered_objects, admin_field_objs);611 javascript_imports = get_javascript_imports(opts, auto_populated_fields, ordered_objects, admin_field_objs); 637 612 638 613 if ordered_objects: … … 647 622 form = context['form'] 648 623 original = context['original'] 649 admin_fieldsets = [AdminFieldSet(name, options, form, original) for name, options in admin_field_objs] 624 bound_field_sets = [field_set.bind(form, original, AdminBoundFieldSet) 625 for field_set in opts.admin.get_field_sets(opts)] 626 650 627 inline_related_objects = opts.get_inline_related_objects_wrapped() 651 628 … … 654 631 extra_context = { 655 632 'add': add, 656 'change': change, 657 'admin_field_objs' : admin_field_objs, 633 'change': change, 658 634 'ordered_objects' : ordered_objects, 635 'ordered_object_names' : ordered_object_names, 659 636 'auto_populated_fields' : auto_populated_fields, 660 637 'javascript_imports' : javascript_imports, … … 662 639 'has_absolute_url': has_absolute_url, 663 640 'form_enc_attrib': form_enc_attrib, 664 'form_url' : form_url, 665 ' admin_fieldsets' : admin_fieldsets,641 'form_url' : form_url, 642 'bound_field_sets' : bound_field_sets, 666 643 'inline_related_objects': inline_related_objects, 667 'ordered_object_names' : ordered_object_names,668 644 'content_type_id' : opts.get_content_type_id(), 669 645 'save_on_top' : opts.admin.save_on_top,
