在django admin显示多对多字段
我们知道如果采用list_display=[]添加是不能显示的,我们需要在admin文件中定义,那么要怎么定义呢,我们来看一下
class BookInfoadmin(admin.ModelAdmin):
#这里是关键
def type_show(self,obj):
return [bt.tname for bt in obj.btype.all()]
list_display = ['id','bname', 'author','pub_date','bintro','type_show']
#*****************************************
#这是我的模型结构,
from django.db import models
# Create your models here.
alse) #书籍简介
cover = models.ImageField('封面', null=True, blank=False) #封面
# read = models.IntegerField(default=0) # 阅读量class TypeInfo(models.Model):
tname = models.CharField('图书类型', max_length=20)
def __str__(self):
return self.tname
class BookInfo(models.Model):
bname = models.CharField('书名',max_length=30) #书名
author = models.CharField('作者', max_length=15) # 作者
pub_date = models.DateField('出版时间') #出版时间
bintro = models.TextField('简介', null=True, blank=F
# comment = models.IntegerField(default=0) # 评论量
btype = models.ManyToManyField('TypeInfo') #多对多
def __str__(self):
return self.bname
我们来分析一下代码,我们想直接显示btype,但是这并不是真正意义上的一个字段,(反倒是一个对象,我自己的理解,具体看官网解释)。这样我们就无法直接显示了,那么我们想要显示它就需要从这个对象中提取字段,就是定义中的type__show,先将字段提取出来然后返回,在将定义的函数给 list_display就可以了。
这样就解决了这个问题