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
			value = rel_to._meta.pk.to_python(value)
			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)