4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

Django Admin Sortableを使うことでモデルインスタンスの順序をドラッグ&ドロップで変えることができます。
#Django Admin SortableのGithub
https://github.com/alsoicode/django-admin-sortable
#導入方法

###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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?