Changeset 4416
- Timestamp:
- 01/24/07 11:18:21 (2 years ago)
- Files:
-
- django/branches/newforms-admin/django/contrib/admin/options.py (modified) (1 diff)
- django/branches/newforms-admin/django/contrib/admin/templates/widget/foreign.html (modified) (1 diff)
- django/branches/newforms-admin/django/contrib/admin/views/main.py (modified) (2 diffs)
- django/branches/newforms-admin/django/contrib/admin/widgets.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/newforms-admin/django/contrib/admin/options.py
r4408 r4416 208 208 widget = widgets.FilteredSelectMultiple(db_field.verbose_name, db_field.rel.filter_interface-1) 209 209 return db_field.formfield(widget=widget, **kwargs) 210 210 211 # For DateTimeFields, use a special field and widget. 211 212 if isinstance(db_field, models.DateTimeField): 212 213 return forms.SplitDateTimeField(required=not db_field.blank, 213 214 widget=widgets.AdminSplitDateTime(), label=capfirst(db_field.verbose_name), **kwargs) 215 214 216 # For DateFields, add a custom CSS class. 215 217 if isinstance(db_field, models.DateField): 216 218 return db_field.formfield(widget=forms.TextInput(attrs={'class': 'vDateField', 'size': '10'})) 219 217 220 # For TimeFields, add a custom CSS class. 218 221 if isinstance(db_field, models.TimeField): 219 222 return db_field.formfield(widget=forms.TextInput(attrs={'class': 'vTimeField', 'size': '8'})) 223 224 # For ForeignKey or ManyToManyFields, use a special widget. 225 if db_field.rel and isinstance(db_field.rel, (models.ManyToOneRel, models.ManyToManyRel)): 226 # Wrap the widget's render() method with a method that adds 227 # extra HTML to the end of the rendered output. 228 formfield = db_field.formfield() 229 formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel) 230 return formfield 231 232 # For any other type of field, just call its formfield() method. 220 233 return db_field.formfield(**kwargs) 221 234 django/branches/newforms-admin/django/contrib/admin/templates/widget/foreign.html
r3352 r4416 1 1 {% load admin_modify adminmedia %} 2 2 {% output_all bound_field.form_fields %} 3 {% if bound_field.raw_id_admin %}4 {% if bound_field.field.rel.limit_choices_to %}5 <a href="{{ bound_field.related_url }}?{% for limit_choice in bound_field.field.rel.limit_choices_to.items %}{% if not forloop.first %}&{% endif %}{{ limit_choice|join:"=" }}{% endfor %}" class="related-lookup" id="lookup_{{ bound_field.element_id }}" onclick="return showRelatedObjectLookupPopup(this);"> <img src="{% admin_media_prefix %}img/admin/selector-search.gif" width="16" height="16" alt="Lookup"></a>6 {% else %}7 <a href="{{ bound_field.related_url }}" class="related-lookup" id="lookup_{{ bound_field.element_id }}" onclick="return showRelatedObjectLookupPopup(this);"> <img src="{% admin_media_prefix %}img/admin/selector-search.gif" width="16" height="16" alt="Lookup"></a>8 {% endif %}9 {% else %}10 {% if bound_field.needs_add_label %}11 <a href="{{ bound_field.related_url }}add/" class="add-another" id="add_{{ bound_field.element_id }}" onclick="return showAddAnotherPopup(this);"> <img src="{% admin_media_prefix %}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>12 {% endif %}{% endif %}13 3 {% if change %} 14 4 {% if bound_field.field.primary_key %} django/branches/newforms-admin/django/contrib/admin/views/main.py
r4382 r4416 64 64 self.original = original 65 65 self.form_fields = [field_mapping[name] for name in self.field.get_manipulator_field_names('')] 66 self.element_id = self.form_fields[0].get_id()67 66 self.has_label_first = not isinstance(self.field, models.BooleanField) 68 67 self.raw_id_admin = use_raw_id_admin(field) 69 68 self.is_date_time = isinstance(field, models.DateTimeField) 70 69 self.is_file_field = isinstance(field, models.FileField) 71 self.needs_add_label = field.rel and (isinstance(field.rel, models.ManyToOneRel) or isinstance(field.rel, models.ManyToManyRel)) and field.rel.to._meta.admin72 70 self.hidden = isinstance(self.field, models.AutoField) 73 71 self.first = False … … 81 79 self.cell_class_attribute = ' class="%s" ' % ' '.join(classes) 82 80 self._repr_filled = False 83 84 if field.rel:85 self.related_url = '../../../%s/%s/' % (field.rel.to._meta.app_label, field.rel.to._meta.object_name.lower())86 81 87 82 def original_value(self): django/branches/newforms-admin/django/contrib/admin/widgets.py
r4407 r4416 41 41 return u'<p class="datetime">%s %s<br />%s %s</p>' % \ 42 42 (_('Date:'), rendered_widgets[0], _('Time:'), rendered_widgets[1]) 43 44 class RelatedFieldWidgetWrapper(object): 45 """ 46 This class is a wrapper whose __call__() method mimics the interface of a 47 Widget's render() method. 48 """ 49 def __init__(self, render_func, rel): 50 self.render_func, self.rel = render_func, rel 51 52 def __call__(self, name, value, *args, **kwargs): 53 from django.conf import settings 54 rel_to = self.rel.to 55 related_url = '../../../%s/%s/' % (rel_to._meta.app_label, rel_to._meta.object_name.lower()) 56 output = [self.render_func(name, value, *args, **kwargs)] 57 if self.rel.raw_id_admin: 58 if self.rel.limit_choices_to: 59 url = '?' + '&'.join(['%s=%s' % (k, v) for k, v in self.rel.limit_choices_to.items()]) 60 else: 61 url = '' 62 # TODO: "id_" is hard-coded here. This should instead use the correct 63 # API to determine the ID dynamically. 64 output.append('<a href="%s%s" class="related-lookup" id="lookup_id_%s" onclick="return showRelatedObjectLookupPopup(this);"> ' % \ 65 (related_url, url, name)) 66 output.append('<img src="%simg/admin/selector-search.gif" width="16" height="16" alt="Lookup"></a>' % settings.ADMIN_MEDIA_PREFIX) 67 #if self.change: # TODO 68 #output.append(' <strong>TODO</strong>') 69 elif rel_to._meta.admin: # If the related object has an admin interface: 70 # TODO: "id_" is hard-coded here. This should instead use the correct 71 # API to determine the ID dynamically. 72 output.append(u'<a href="%sadd/" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \ 73 (related_url, name)) 74 output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>' % settings.ADMIN_MEDIA_PREFIX) 75 return u''.join(output)
