前言
前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示。本篇继续学习一对一(OneToOneField)关联的查询。
上一篇list_display只显示了当前表的字段信息,如果想显示关联表的字段,需要关联查询。
一对一(OneToOneField)关系
models.py内容,参考https://www.cnblogs.com/canglongdao/p/14121042.html,
shell模式新增数据
为了调试方便,可以使用django的shell模式,对表的数据增删改查操作,打开cmd,cd到manage.py目录
python manage.py shell
现在cardds表新增一条记录:card_id='03',card_user='xiaoxiao'
接着在carddetaills表新增一条关联的信息
正向查询
接着上面的操作,查询Cardds表的card_id和card_user字段值
通过Cardds表对象a查询关联的CardDetaills表里面的字段值
反向查询
如果是以CardDetaills表为操作对象,可以直接查询CardDetaills表里面的字段值
也可以通过CardDetaills表为对象,查询关联的Cardds表的值
list_display显示关联表字段
在上一篇,通过内联(inlines)可以在详情页面显示关联的表信息
如果我们想让关联表的字段显示在list_display列表界面,这里就需要自己定义函数,通过表的关联去查询了
# coding:utf-8 #adminx.py import xadmin from .models import Studentts,Cardds,CardDetaills class ControlStudent(object): # 显示的字段 list_display = ('student_ids', 'names', 'age', 'score') # 搜索条件 search_fields = ('name',) # 每页显示10条 list_per_page = 10 class MoreInfo(object): model = CardDetaills class ControlCard(object): list_display = ["card_id", "card_user","电话","城市", "add_time"] # 在Card页面显示更多信息CardDetail inlines = [MoreInfo] #查询关联表的tel字段 def 电话(self,obj): return obj.carddetaills.tel def 城市(self,obj): return obj.carddetaills.city # 注册Student表 xadmin.site.register(Studentts, ControlStudent) # 注册card表,关联CardDetail xadmin.site.register(Cardds, ControlCard)
此时页面显示效果如下