Django

Code

Changeset 4405

Show
Ignore:
Timestamp:
01/23/07 14:26:35 (2 years ago)
Author:
adrian
Message:

newforms-admin: DateTimeFields? are now properly split into two widgets in the admin interface, using the new SplitDateTimeField? and SplitDateTimeWidget?

Files:

Legend:

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

    r4402 r4405  
    208208            widget = widgets.FilteredSelectMultiple(db_field.verbose_name, db_field.rel.filter_interface-1) 
    209209            return db_field.formfield(widget=widget, **kwargs) 
     210        # For DateTimeFields, use a special field and widget. 
     211        if isinstance(db_field, models.DateTimeField): 
     212            return forms.SplitDateTimeField(required=not db_field.blank, 
     213                widget=widgets.AdminSplitDateTime(), label=capfirst(db_field.verbose_name), **kwargs) 
    210214        return db_field.formfield(**kwargs) 
    211215 
  • django/branches/newforms-admin/django/contrib/admin/widgets.py

    r4391 r4405  
    44 
    55from django import newforms as forms 
     6import datetime 
    67 
    78class FilteredSelectMultiple(forms.SelectMultiple): 
     
    2021        from django.conf import settings 
    2122        output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] 
    22         output.append('<script type="text/javascript">addEvent(window, "load", function(e) {') 
     23        output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {') 
    2324        # TODO: "id_" is hard-coded here. This should instead use the correct 
    2425        # API to determine the ID dynamically. 
    25         output.append('SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % \ 
     26        output.append(u'SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % \ 
    2627            (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.ADMIN_MEDIA_PREFIX)) 
    27         return ''.join(output) 
     28        return u''.join(output) 
     29 
     30class AdminSplitDateTime(forms.SplitDateTimeWidget): 
     31    """ 
     32    A SplitDateTime Widget that has some admin-specific styling. 
     33    """ 
     34    def __init__(self, attrs=None): 
     35        widgets = [forms.TextInput(attrs={'class': 'vDateField', 'size': '10'}), 
     36                   forms.TextInput(attrs={'class': 'vTimeField', 'size': '8'})] 
     37        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because 
     38        # we want to define widgets. 
     39        forms.MultiWidget.__init__(self, widgets, attrs) 
     40 
     41    def format_output(self, rendered_widgets): 
     42        return u'<p class="datetime">%s %s<br />%s %s</p>' % \ 
     43            (_('Date:'), rendered_widgets[0], _('Time:'), rendered_widgets[1])