# models.py from django.db import models from filebrowser.fields import FileBrowseField from autoslug.fields import AutoSlugField import datetime class Project(models.Model): title = models.CharField(max_length = 200, blank = True) publish_date = models.DateField(default = datetime.date.today) client = models.CharField(max_length = 200, blank = True) slug = AutoSlugField(populate_from='title') thumbnail = FileBrowseField("Thumbnail", max_length=200, format='Image', blank = True) details = models.TextField(blank = True) featured = models.BooleanField() order = models.PositiveIntegerField(default = 1, blank = True) sector = models.ForeignKey(Sector) url = models.CharField(max_length = 200, blank = True) def get_absolute_url(self): return '/portfolio/project/%s' % self.slug def __unicode__(self): return self.title class Meta: ordering = ('order',) # admin.py from django.contrib import admin from abstraktion.portfolio.models import * class ProjectAdmin(admin.ModelAdmin): fieldsets = ( ('Summary', { 'fields': ('title', 'client', 'publish_date') }), ('Description', { 'fields': ('details', 'sector') }), ('Listing', { 'fields': ('thumbnail', 'url', 'order', 'featured') }) ) list_display_links = ('title',) list_display = ('title', 'client', 'sector', 'publish_date', 'order') list_editable = ('order',) class Media: js = [ '/media/tinymce/jscripts/tiny_mce/tiny_mce.js', '/media/tinymce_setup/tinymce_setup.js', '/media/js/sortable_list.js' ] # sortable_list.js (function($) { // Matching regex with jQuery $.expr[':'].regex = function(elem, index, match) { var matchParams = match[3].split(','), validLabels = /^(data|css):/, attr = { method: matchParams[0].match(validLabels) ? matchParams[0].split(':')[0] : 'attr', property: matchParams.shift().replace(validLabels,'') }, regexFlags = 'ig', regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags); return regex.test($(elem)[attr.method](attr.property)); } $(document).ready(function(){ $('table tbody tr').css({ 'cursor': 'move' }); $('table tbody').sortable({ axis: 'y', update: function(){ $('.footer').show(); $.each($('table tbody tr'), function(i){ $(this).find('input:regex(name, .*-order)').val(i + 1); }); $(this).find('tr').removeClass('row1').removeClass('row2'); $(this).find('tr:odd').addClass('row2'); $(this).find('tr:even').addClass('row1'); } }); }); })(django.jQuery);