在django admin显示多对多字段

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就可以了。

这样就解决了这个问题

发布了37 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42236288/article/details/95931571