django.contrib.admin.widgets.ForeignKeyRawIdWidget
	method:
	    def render(self, name, value, attrs=None):
	        rel_to = self.rel.to
	        # custom fields may need the to_python
	        # conversion in order to facilitate 
	        # unicode conversion
	        try:
	            value = self.rel.to._meta.get_field(self.rel.field_name).to_python(value)
	        except AttributeError:
	            pass# 'ManyToManyRel' object has no attribute 'field_name'
	        if attrs is None:
	            attrs = {}
	        extra = []
	        if rel_to in self.admin_site._registry:
	            # The related object is registered with the same AdminSite
	            related_url = reverse('admin:%s_%s_changelist' %
	                                    (rel_to._meta.app_label,
	                                    rel_to._meta.module_name),
	                                    current_app=self.admin_site.name)
	        
	            params = self.url_parameters()
	            if params:
	                url = u'?' + u'&amp;'.join([u'%s=%s' % (k, v) for k, v in params.items()])
	            else:
	                url = u''
	            if "class" not in attrs:
	                attrs['class'] = 'vForeignKeyRawIdAdminField' # The JavaScript code looks for this hook.
	            # TODO: "lookup_id_" is hard-coded here. This should instead use
	            # the correct API to determine the ID dynamically.
	            extra.append(u'<a href="%s%s" class="related-lookup" id="lookup_id_%s" onclick="return showRelatedObjectLookupPopup(this);"> '
	                            % (related_url, url, name))
	            extra.append(u'<img src="%s" width="16" height="16" alt="%s" /></a>'
	                            % (static('admin/img/selector-search.gif'), _('Lookup')))
	        output = [super(ForeignKeyRawIdWidget, self).render(name, value, attrs)] + extra
	        if value:
	            output.append(self.label_for_value(value))
	        return mark_safe(u''.join(output))		
django.forms.forms.BaseForm
	method:
	    def _get_changed_data(self):
	        if self._changed_data is None:
	            self._changed_data = []
	            # XXX: For now we're asking the individual widgets whether or not the
	            # data has changed. It would probably be more efficient to hash the
	            # initial data, store it in a hidden field, and compare a hash of the
	            # submitted data, but we'd need a way to easily get the string value
	            # for a given field. Right now, that logic is embedded in the render
	            # method of each widget.
	            for name, field in self.fields.items():
	                prefixed_name = self.add_prefix(name)
	                data_value = field.widget.value_from_datadict(self.data, self.files, prefixed_name)
	                if not field.show_hidden_initial:
	                    initial_value = self.initial.get(name, field.initial)
	                else:
	                    initial_prefixed_name = self.add_initial_prefix(name)
	                    hidden_widget = field.hidden_widget()
	                    initial_value = hidden_widget.value_from_datadict(
	                        self.data, self.files, initial_prefixed_name)
	                # custom fields may need the to_python
	                # conversion in order to facilitate 
	                # unicode conversion
	                if isinstance(initial_value,list):
	                    # ManyToManyField uses a list
	                    initial_value = [field.to_python(v) for v in initial_value]
	                else:
	                    initial_value = field.to_python(initial_value)
	                if field.widget._has_changed(initial_value, data_value):
	                    self._changed_data.append(name)
	        return self._changed_data
	    changed_data = property(_get_changed_data)

django.contrib.admin.widgets.RelatedFieldWidgetWrapper
	method:
	    def render(self, name, value, *args, **kwargs):
	        rel_to = self.rel.to
	        # custom fields may need the to_python
	        # conversion in order to facilitate 
	        # unicode conversion
	        try:
	            value = self.rel.to._meta.get_field(self.rel.field_name).to_python(value)
	        except AttributeError:
	            pass# 'ManyToManyRel' object has no attribute 'field_name'
	        info = (rel_to._meta.app_label, rel_to._meta.object_name.lower())
	        self.widget.choices = self.choices
	        output = [self.widget.render(name, value, *args, **kwargs)]
	        if self.can_add_related:
	            related_url = reverse('admin:%s_%s_add' % info, current_app=self.admin_site.name)
	            # TODO: "add_id_" is hard-coded here. This should instead use the
	            # correct API to determine the ID dynamically.
	            output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> '
	                          % (related_url, name))
	            output.append(u'<img src="%s" width="10" height="10" alt="%s"/></a>'
	                          % (static('admin/img/icon_addlink.gif'), _('Add Another')))
	        return mark_safe(u''.join(output))