list_display展示多对多关系的内容

表结构关系

表一

class Server(models.Model):
asset = models.OneToOneField('Asset')
created_by_choices = (
('auto','Auto'),
('manual','Manual'),
)
created_by = models.CharField(choices=created_by_choices,max_length=32,default='auto') #auto: auto created, manual:created manually
hosted_on = models.ForeignKey('self',related_name='hosted_on_server',blank=True,null=True) #for vitural server
model = models.CharField(u'型号',max_length=128,null=True, blank=True )
# 若有多个CPU,型号应该都是一致的,故没做ForeignKey
raid_type = models.CharField(u'raid类型',max_length=512, blank=True,null=True)
os_type = models.CharField(u'操作系统类型',max_length=64, blank=True,null=True)
os_distribution =models.CharField(u'发型版本',max_length=64, blank=True,null=True)
os_release = models.CharField(u'操作系统版本',max_length=64, blank=True,null=True)
salt_minion_id = models.CharField(u'salt minion id',max_length=254,blank=True,null=True)
create_date = models.DateTimeField(blank=True, auto_now_add=True)
update_date = models.DateTimeField(blank=True,null=True)
class Meta:
verbose_name = '服务器'
verbose_name_plural = "服务器"
def __str__(self):
return '%s sn:%s' %(self.asset.name,self.asset.sn)

表二

class SaltGroup(models.Model):
'''
saltstack 的minion组管理
'''
group_name = models.CharField(u'组名',max_length=50)
host_target = models.ManyToManyField(Server,verbose_name='组成员',null=True,blank=True)
whether_create = models.IntegerField(u'是否创建了组在saltstack配置文件里',default=0) #0:没有创建,1:表示创建了
class Meta:
db_table = "saltstack组"

然后我们在admin配置文件这么写:

class Saltstack_GroupAdmin(admin.ModelAdmin):
list_display = ['group_name','salt_minion_id'] # 这里需要注意的是,salt_minion_id是我们要在前端展示的内容,自己定义的
def salt_minion_id(self,obj):
'''
这个方法就是用来对salt_minion_id这个字段做处理,把我们需要展示的前端内容截取出来。需要注意的是,方法名必须要和在list_display里面的一致,这样才可以调用。
'''
print(obj.host_target.salt_minion_id)
return obj.host_target.salt_minion_id # host_target是我们SaltGroup表中多对多的字段,salt_minion_id是刚才我们自定义的字段,
salt_minion_id.short_description = "Minion's ID " # 对salt_minion_id这个做个简短的title。 admin.site.register(models.SaltGroup,Saltstack_GroupAdmin),

好了至此,重启下django即可在django admin界面下使用了

list_display展示外键内容

首先看看表结构关系

表一

class DockerContainers(models.Model):
'''
用来记录docker容器信息的
'''
Real_host_ip = models.ForeignKey(DockerOfHost,verbose_name='Docker宿主机IP') # 这段是外键
Container_id = models.CharField(u'容器ID',max_length=400,primary_key=True,unique=True)
Container_name = models.CharField(u'容器名字',max_length=300,null=True,blank=True)
Container_image = models.CharField(u'容器镜像',max_length=300)
Container_Image_id = models.CharField(u'镜像ID',max_length=500,null=True,blank=True)
Command = models.CharField(u'运行的命令',max_length=300,null=True,blank=True)
Created = models.CharField(u'创建时间',max_length=200)
Status = models.CharField(u'运行状态',max_length=100,null=True,blank=True)
Port = models.CharField(u'容器端口',max_length=1000,null=True,blank=True)
SizeRw = models.IntegerField(null=True,blank=True)
SizeRootFs = models.IntegerField(null=True,blank=True)
Host_config = models.CharField(u'主机配置',max_length=1024,null=True,blank=True)
Network_settings = models.CharField(u'网络配置',max_length=3000,null=True,blank=True)
Mounts = models.CharField(u'挂载目录',max_length=1024,null=True,blank=True)
Record_time = models.DateTimeField(u'数据更新时间',auto_now=True) def __str__(self):
return "%s:%s"%(self.Real_host_ip,self.Container_id) class Meta:
verbose_name = "Docker容器信息"
verbose_name_plural = "Docker容器信息"

表二:

class DockerOfHost(models.Model):
'''
用来记录docker宿主机信息到
'''
host_ip = models.CharField(u'Docker宿主机IP',max_length=250,unique=True)
def __str__(self):
return self.host_ip # 一定要retrun self.ip,这样list_display才能显示
class Meta:
verbose_name = "Docker宿主机IP"
verbose_name_plural = "Docker宿主机IP"

admin.py里的代码如下:

class dockercontainers(admin.ModelAdmin):
list_display = ['Real_host_ip','Container_id','Container_name','Container_image','Container_Image_id','Command','Created','Status',\
'Port','SizeRw','SizeRootFs','Host_config','Network_settings','Mounts','Record_time']
search_fields = ['Container_id','Container_name','Container_image','Status']

其实最关键的一步在于表二里的__str__方法return回来的内容,套用官网的一句话就是:If the field is a ForeignKey, Django will display the str() (unicode() on Python 2) of the related object. If you don’t set list_display, the admin site will display a single column that displays the str() (unicode() on Python 2) representation of each object.

更多资料可以参考官网:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/

5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下的更多相关文章

  1. hibernate多对一单向外键

    hibernate多对一单向外键: 描述:

  2. 08-hibernate注解-多对多双向外键关联

    多对多双向外键 双方持有对方的集合对象 其中一方设置: //教师类 @ManyToMany(mappedBy="teachers")   //mappedby表示教师交给学生来控制 ...

  3. 08-hibernate注解-多对多单向外键关联

    多对多单向外键 1,学生和教师构成多对多的关联关系 2,其中一个多方持有另一个多方的集合对象(学生持有教室的集合) 3,通过注解@JoinTable,创建中间表(作为多对多的载体,用来确定学生和教师的 ...

  4. 05-hibernate注解-多对一单向外键关联

    多对一单向外键 1,多方持有一方的引用,比如:多个学生对应一个班级(多对一) 2,@ManyToOne(cascade={CascadeType.ALL},  fetch=FetchType.EAGE ...

  5. Hibernate一对多(多对一)外键设置汇总

    我打算在角色表(role)中添加一个帐号表(account)的外键(accountId),步骤如下: 1.首先在角色表(role)中添加列. 添加语句:alter table role add(acc ...

  6. 19 01 15 django 数据库设计模型 管理站点 注意:在引入外键在django 2以上改版

    模型设计 我们之前操作数据库是通过写sql语句  ORM框架    可以通过不写sql  语句来进行操作数据库 1.定义模型类 模型类定义在models.py文件中,继承自models.Model类. ...

  7. DJANGO的ORM的Q查询作多字段外键的模糊查询样码

    工作中用到的,存照一下. from django.db.models import Q if self.kwargs.has_key('search_pk'): search_pk = self.kw ...

  8. hibernate annotation 之 一对多、多对一双向外键关联

    假设,一个农场产出多种植物,具体的某一植物产于某一农场. 3 import java.io.Serializable; 4 import java.util.Set; 5 import javax.p ...

  9. 【Django 2.2文档系列】Model 外键中的on_delete参数用法

    场景 我们用Django的Model时,有时候需要关联外键.关联外键时,参数:on_delete的几个配置选项到底是干嘛的呢,你知道吗? 参数介绍 models.CASCADE 级联删除.Django ...

随机推荐

  1. 由于目标计算机积极拒绝,无法连接。 192.168.1.106:8078 说明: 执行当前 Web 请求期间,出现未经处理的异常。

    请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Net.Sockets.SocketException: 由于目标计算机积极拒绝,无法连接. 1 ...

  2. [Android]使用Dagger 2依赖注入 - 图表创建的性能(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5098943.html 使用Dagger 2依赖注入 - 图表创 ...

  3. git-入门

    一.简介 Git是目前世界上最先进的分布式版本控制系统,Git中绝大部分操作都是访问本地资源,不需要网络,其中有三个概念比较重要:1. 工作目录 2. 暂存区域 3.本地仓库. 简单说明一下,工作目录 ...

  4. ORACLE 博客文章目录(2015-05-27更新)

    从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻寻觅觅,朝圣的心路历程,现在将ORACLE方面的博客整理 ...

  5. centos7中没有安装ifconfig命令的解决方法

    初装centos 7时,运行config报 command not found 错误,我在网上找了大量资料,下面的资料中查找原因和解决方式最详细,能很好的解决这个问题. ifconfig命令是设置或显 ...

  6. MySQL Performance-Schema(三) 实践篇

    前一篇文章我们分析了Performance-Schema中每个表的用途,以及主要字段的含义,比较侧重于理论的介绍.这篇文章我主要从DBA的角度出发,详细介绍如何通过Performance-Schema ...

  7. putty提供的两个文件传输工具PSCP、PSFTP详细介绍

    用 SSH 来传输文件 PuTTY 提供了两个文件传输工具 PSCP (PuTTY Secure Copy client) PSFTP (PuTTY SFTP client) PSCP 通过 SSH ...

  8. Monthly Income Report – August 2016

    原文链接:https://marcoschwartz.com/monthly-income-report-august-2016/ Every month, I publish a report of ...

  9. Struts2入门案例

    struts2最简便的案例   Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点.Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架 ...

  10. python下如何安装biopython

    本来是自学python,后来又了解到有biopython这个包,将想安装下来,结果折腾了我一上午...终于安装成了,哈哈哈,功夫不负有心啊 过程如下: 1.首先去http://biopython.or ...