LoginSignup
4
4

More than 3 years have passed since last update.

Django Admin Sortableを使ってモデルインスタンスの順序を変えよう!

Posted at

Django Admin Sortableを使うことでモデルインスタンスの順序をドラッグ&ドロップで変えることができます。

Django Admin SortableのGithub

導入方法

pipインストール

$ pip install django-admin-sortable

setting.pyに追加

setting.pyINSTALLED_APPSadminsortableを追加します
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.modelsSortableMixinを継承させる。
モデル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ボタンからドラック&ドロップできるページに移動します。
25059b3cc816923a9c26f7b04893ee61.png

__str__ (通常時)

実際にデータにある値を表示してくれる
image.png

__unicode__ (unicodeにした場合)

このようにobjectになって表示されます。
image.png

僕自身のメモって感じなので参考程度にどうぞ!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4