class MyModel(models.Model): order = models.IntegerField(editable=False) #... def move(self, move): if move == 'UP': mm = MyModel.objects.get(order=self.order-1) mm.order += 1 mm.save() self.order -= 1 self.save() #... class MyModelAdminForm(forms.ModelForm): move = forms.CharField(widget=forms.Select) move.required = False move.widget.choices=( (models.BLANK_CHOICE_DASH[0]), ('FIRST', 'First'), ('UP', 'Up'), ('DOWN', 'Down'), ('LAST', 'Last'), ) class Meta: model = MyModel class MyModelAdmin(admin.ModelAdmin): form = MyModelAdminForm def save_model(self, request, obj, form, change): obj.save() move = form.cleaned_data['move'] obj.move(move) admin.site.register(MyModel, MyModelAdmin)