python测试开发django(34)--一对一(OneToOneField)关系查询

前言

前面一篇在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)

 此时页面显示效果如下

posted on 2020-12-20 22:49  星空6  阅读(216)  评论(0编辑  收藏  举报

导航