Move Items up and down from the admin interface. Like phpBB does it with its forums.
An additional select field is added to the admin form. After the model has been saved, a model method is called (with the value of the new field), which handles the reordering.
A more detailed description and a screenshot can be found here.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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)
|
More like this
- find even number by Rajeev529 1 month, 1 week ago
- Form field with fixed value by roam 2 months ago
- New Snippet! by Antoliny0919 2 months, 1 week ago
- Add Toggle Switch Widget to Django Forms by OgliariNatan 4 months, 3 weeks ago
- get_object_or_none by azwdevops 8 months, 2 weeks ago
Comments
Here is the full "move()" model method. I added some smarts to the algorithm to prevent "skipping".
#
Please login first before commenting.