在admin中list_display如何展示外键字段
# 背景
在django的admin中,我们经常会碰到要在列表页中展示外键字段的需求,list_display
即可用来展示对应model的字段,但直接展示model外键字段是不被允许的,怎么解决这个问题呢?继续往下看吧。
# 示例
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255, verbose_name='作者')
age = models.IntegerField(verbose_name='年龄')
class Book(models.Model):
author = models.ForeignKey('Author', verbose_name='作者', on_delete=models.CASCADE)
name = models.CharField(max_length=255, verbose_name='书名')
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# admin.py
from django.contrib import admin
from .models import Book
# 错误的示范
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('name', 'author__name', 'author__age')
# 正确的示范
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('name', 'display_author_name', 'display_author_age')
def display_author_name(self, obj):
return obj.author.name
display_author_name.short_description = '作者'
display_author_name.admin_order_field = 'author__name'
def display_author_age(self, obj):
return obj.author.age
display_author_age.short_description = '年龄'
display_author_age.admin_order_field = 'author__age'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 总结
代码中display_<field>.short_description
用于指定列标题,display_<field>.admin_order_field
用于指定排序字段名称(若不进行设置,该列将不能进行排序)
上次更新: 2022/01/20, 04:18:33
- 01
- docker-compose部署openldap12-30
- 02
- drf中如何设置返回Serializers自定义字段10-10
- 03
- 在admin中list_filter多级外键问题解决10-08