2019/08/10
Django Admin ForeignKeyForeignKeyモデルのフィールドをAdmin画面のlist_displayに追加する
外部キーで参照しているモデルのフィールド情報をAdmin画面で表示する方法です。
以下のようなmodels.pyがあったとして、BookモデルのAdminでAutherのageフィールドを表示できるようにします。
models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey('Author', on_delete=models.CASCADE)
def __str__(self):
return self.title
admin.py
で、author_age
というメソッドを作り、それをlist_diaplay
に追加することでAuthorの年齢を表示できます。
admin.py
from django.contrib import admin
from .models import Book
class BookAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'author', 'author_age')
list_display_links = ('id', 'title')
def author_age(self, obj):
return obj.author.age
author_age.short_description = '著者の年齢'
author_age.admin_order_field = 'author__age'
admin.site.register(Book, BookAdmin)
author_age
メソッドは、obj
という引数名でBookモデルインスタンスを受け取っています。
obj.author.age
のようにすることで、外部キーで参照しているAuthorモデルのフィールドにアクセスできます。
- short_description - 表示されるカラムのタイトルをカスタマイズします
- admin_order_field - 紐づいたモデルでソートできるようにしたい場合に指定します