class PreviewAdmin(admin.ModelAdmin):
    def admin_slide_preview(self, obj):
        return "<div class=\"previewslide\" id=\"%s/preview/\">+</div>" % obj.id
    admin_slide_preview.allow_tags = True
    admin_slide_preview.short_description = 'Preview'
    
    def get_preview(self, request, object_id):
        sub = self.queryset(request)[0]
        template = "preview/%s.html" % sub.__class__.__name__
        return object_detail(request, queryset=self.queryset(request), object_id=object_id, template_name=template.lower())
        
    def get_urls(self):
        urls = super(PreviewAdmin, self).get_urls()
        my_urls = patterns('',
            (r'^(?P<object_id>\d+)/preview/$', self.get_preview),
        )
        return my_urls + urls
    
    class Media:
        js = js = ('js/jquery.js',
                   'js/jquery.adminpreview.js',)

==============
jquery.adminpreview.js
$(document).ready(function(){
	$(".previewslide").click(function(){
		$.ajax({
			url:$(this).attr('id'),
			context: $(this).parent().parent(),
			success:function(data){
				var $html = $(data);
				$('.previewed').each(function(){
					$(this).remove();
				});
				
				if(!$html.hasClass('previewed')){
					$html.addClass('previewed');
				}
				
				$html.addClass($(this.context).attr('class'));		
				$(this.context).after($html);
			}
		});
	});
});



==============
preview/template.html
<tr>
	<td colspan="5">
		<table>
			<tr>
				<td>
					<img src="{{ object.image.featured.url }}">
				</td>
				<td>
					Abstract:<br/>
					{{ object.abstract }}
				</td>
				<td>
					Author: {{ object.author }}<br/>
					Published: {{ object.published_date }}<br/>
					Category: {{ object.category }}<br/>
					<br/>
					Tags: {% for tag in object.get_tags %}
							{{ tag }}
							{% if not forloop.last %}, {% endif %}
						  {% endfor %}
				</td>
			</tr>
		</table>
	</td>
</tr>