日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 manuallyhosted_on = models.ForeignKey('self',related_name='hosted_on_server',blank=True,null=True) #for vitural servermodel = models.CharField(u'型號',max_length=128,null=True, blank=True )# 若有多個CPU,型號應該都是一致的,故沒做ForeignKeyraid_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/

轉載于:https://www.cnblogs.com/liaojiafa/p/6249459.html

總結

以上是生活随笔為你收集整理的5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。