首页  /  后端技术  /  Django  /  Django-admin管理工具使用(四)

Django-admin管理工具使用(四)

 作者:白驹    来源:原创    浏览:263    日期:2020年2月29日  

Django-admin管理工具使用(四)

django-admin中显示多对多字段,直接在list_dispay中设置多对对字段是无法显示的
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
    list_display =('title','cid','author','source','article_tags','creattime','updatetime')  #列表展示字段
这里我们需要注意一个细节,我们在注册article文章模型时没有一个article_tags但是在列表显示字段时写的是article_tags,没错在建立模型时候django对多对多会自动生成一个中间表,也就是artile_tags,而我们建立的模型是article和tags实际上表的管理数据是存放在article_tags表中的,所以在定义list_display的时候元组中存在一个article_tags的字段,如果直接写上tags就会报错
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','cid','author','source','article_tags','creattime','updatetime')  #列表展示字段
    #在这里我们需要注意函数名称和多对多字段名称一致
    def article_tags(self,obj):
        tag_list = []
        for tag in obj.tags.all():
            tag_list.append(tag.name)
        return ','.join(tag_list)

list_display多对多数据表字段内容无法显示

这里已经完全能够正常显示了,但是表头显示ARTICLE TAGS这里我们需要对其进行设置
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','cid','author','source','article_tags','creattime','updatetime')  #列表展示字段
    def article_tags(self,obj):
        tag_list = []
        for tag in obj.tags.all():
            tag_list.append(tag.name)
        return ','.join(tag_list)
    #short_description属性来自article_tags函数,这里我们要保持一致
    article_tags.short_description = "标签"

list_display多对多数据表字段内容无法显示

至此标签已经能够完全正常显示了,如果我们要对标签展示方式进行美化,也可以在这个方法进行操作
from django.contrib import admin
from django.utils.html import format_html
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','cid','author','source','article_tags','creattime','updatetime')  #列表展示字段
    def article_tags(self,obj):
        tag_list = []
        for tag in obj.tags.all():
            tag_list.append('<span style="color:''orange">%s</span>'%(tag.name))
        return format_html(','.join(tag_list))
    article_tags.short_description = "标签"

list_display多对多数据表字段内容无法显示

  • 评论
  • 相关评论