zoukankan      html  css  js  c++  java
  • 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)
    

     此时页面显示效果如下

  • 相关阅读:
    设计模式七大原则之单一职责原则
    机器学习入门与进阶
    Django之路
    Python编程之路
    Python练习1
    Docker入门与进阶
    运维相关
    Node.js(一)
    位运算
    双指针算法
  • 原文地址:https://www.cnblogs.com/canglongdao/p/14165780.html
Copyright © 2011-2022 走看看