Django

Code

Changeset 4391

Show
Ignore:
Timestamp:
01/22/07 00:48:10 (2 years ago)
Author:
adrian
Message:

newforms-admin: Added a custom formfield hook for the admin forms. The first customization is that ManyToManyFields? with 'filter_interface' set use a special widget, FilteredSelectMultiple?. This removes the need for the old filter_interface_script_maybe admin template tag.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/newforms-admin/django/contrib/admin/options.py

    r4382 r4391  
    11from django import oldforms, template 
    22from django import newforms as forms 
     3from django.contrib.admin import widgets 
    34from django.core.exceptions import ImproperlyConfigured, PermissionDenied 
    45from django.db import models 
     
    196197            yield fs 
    197198 
     199    def formfield_for_dbfield(self, db_field, **kwargs): 
     200        """ 
     201        Hook for specifying the form Field instance for a given database Field 
     202        instance. 
     203 
     204        If kwargs are given, they're passed to the form Field's constructor. 
     205        """ 
     206        # For filter_interface ManyToManyFields, use a special Widget. 
     207        if isinstance(db_field, models.ManyToManyField) and db_field.rel.filter_interface: 
     208            widget = widgets.FilteredSelectMultiple(db_field.verbose_name, db_field.rel.filter_interface-1) 
     209            return db_field.formfield(widget=widget) 
     210        return db_field.formfield(**kwargs) 
     211 
    198212    def has_add_permission(self, request): 
    199213        "Returns True if the given request has permission to add an object." 
     
    239253            post_url = '../../../' 
    240254 
    241         ModelForm = forms.form_for_model(model
     255        ModelForm = forms.form_for_model(model, formfield_callback=self.formfield_for_dbfield
    242256 
    243257        if request.POST: 
     
    304318            raise Http404('%s object with primary key %r does not exist' % (model_name, escape(object_id))) 
    305319 
    306         ModelForm = forms.form_for_instance(obj
     320        ModelForm = forms.form_for_instance(obj, formfield_callback=self.formfield_for_dbfield
    307321 
    308322        if request.POST: 
  • django/branches/newforms-admin/django/contrib/admin/templatetags/admin_modify.py

    r4382 r4391  
    161161auto_populated_field_script = register.simple_tag(auto_populated_field_script) 
    162162 
    163 def filter_interface_script_maybe(bound_field): 
    164     f = bound_field.field 
    165     if f.rel and isinstance(f.rel, models.ManyToManyRel) and f.rel.filter_interface: 
    166         return '<script type="text/javascript">addEvent(window, "load", function(e) {' \ 
    167               ' SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % ( 
    168               f.name, f.verbose_name.replace('"', '\\"'), f.rel.filter_interface-1, settings.ADMIN_MEDIA_PREFIX) 
    169     else: 
    170         return '' 
    171 filter_interface_script_maybe = register.simple_tag(filter_interface_script_maybe) 
    172  
    173163def field_widget(parser, token): 
    174164    bits = token.contents.split()