Django Admin Sortableを使うことでモデルインスタンスの順序をドラッグ&ドロップで変えることができます。
#Django Admin SortableのGithub
https://github.com/alsoicode/django-admin-sortable
#導入方法
###pipインストール
$ pip install django-admin-sortable
###setting.pyに追加
#####setting.py
のINSTALLED_APPS
にadminsortable
を追加します
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'adminsortable', ←--------------追加
]
###models.pyに追加
####Before
from django.db import models
class Basic(models.Model):
title = models.CharField(max_length=100)
def __str__(self):
return self.title
####After
モデルの順番を変えるためにモデルにadminsortable.models
のSortableMixin
を継承させる。
モデルMeta.ordering
にthe_orderフィールドを追加してください。
the_order
などの名前に関してorder_filed
は既に使われているので使わないようにする。
※順番を決めるために必要なフィールドがあるらしいのですが僕はしっかり理解できなかったのでGithubのコードと同じようにmodels.PositiveIntegerField
で進めてみましたが特にお問題はなさそうです。
他にフィールドを確認した方はこちらから
from django.db import models
from adminsortable.models import SortableMixin ←-追加
class Basic(SortableMixin): ←-変更
title = models.CharField(max_length=100)
class Meta:
ordering = ['the_order'] ←-追加
the_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) ←追加
def __unicode__(self): ←'__unicode__'に関してはこれで実行するとobjectsで表示されます。
return self.title
###admin.pyに追加
####Before
from django.contrib import admin
from .models import Basic
class BasicAdmin(admin.ModelAdmin):
list_display = ('id','title')
list_display_links = ('id','title')
admin.site.register(Basic.BasicAdmin)
####After
adminsortable.admin.SortableAdmin
を継承する。
from django.contrib import admin
from adminsortable.admin import SortableAdmin
from .models import Basic
class BasicAdmin(SortableAdmin):
list_display = ('id','title')
list_display_links = ('id','title')
admin.site.register(Basic.BasicAdmin)
###最後に
最後にAdmin画面に行って実際に順番を変えようとしますが通常画面ではできません右上のCHANGE ORDERボタンからドラック&ドロップできるページに移動します。
__str__
(通常時)
__unicode__
(unicodeにした場合)
僕自身のメモって感じなので参考程度にどうぞ!