django有外键关系的两张表如何相互查找


Posted in Python onFebruary 10, 2020

这篇文章主要介绍了django有外键关系的两张表如何相互查找,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集?

平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找。如果条件是表中外键列所对应表的某一列,该如何查询数据?

表1是新闻表,是回复表中某一外键指向的表,表2是回复表。

问题1:根据表1的某些条件来查找表2的对象集。

class News(models.Model):
 title = models.CharField(max_length=50);
 summary = models.TextField();
 
 url = models.CharField(max_length=150);
 favorCount = models.IntegerField(default=0);
 favorUsername = models.TextField(default="");
 replyCount = models.IntegerField(default=0);

class Reply(models.Model):
 content = models.TextField();
 user = models.ForeignKey('User');
 newID = models.ForeignKey('News');
 replyTime = models.DateTimeField(auto_now_add=True);
 
 def __unicode__(self):
  return self.content;

像这样的数据表,想要查找对于新闻id是3的所有回复?

方法一、首先获得外键指向的表中对象,然后通过‘_set'这样的方法获得目标表中的数据。

obj = models.News.objects.get(id=3)
replys = obj.reply_set.all()

方法二、直接在目标表中通过双下划线来指定外键对应表中的域来查找符合条件的对象。

models.Reply.objects.filter(newID__id=3)

问题2: 根据表2的某些条件查找表1的对象集。此时需要将表2的名字小写加两个下划线,再加上查找条件。比如:查找回复内容中包含“new”的所有新闻

models.News.objects.filter(reply__content__contains='new');

在filter中可以这样用,在values方法中也可以这样使用,此时的值便是外键对应表中的数据。

2.在使用django中避免不了要跟前台进行数据交互,而python中的数据类型丰富,比如datetime模块的datetime类型就不可以json编码,如果想要继续json格式化,有两种方法可以解决,

1)使用django提供的格式化

2)自己编写编码器或默认处理函数。

注意:pyhton中json只会编码python中自己的数据类型,比如数字、字符串、元组、列表、字典等。在django中处理数据经常遇到queryset这类数据,需要先将他转化成列表再json编码。[list(queryset)]
方法一、所以需要更强劲的django.core提供的serializers.serialize方法,一般使用json格式就是serializers.serialize('json',data)。可以很方便的将django中所有数据类型进行json格式编码。

方法二、自己编写编码器或者写默认处理函数

1)写自己的编码器类

class MyJSONEncoder(json.JSONEncoder):
 def default(self, obj):
  if isinstance(obj, datetime.datetime):
   return (datetime.timedelta(hours=8)+obj).strftime('%Y-%m-%d %H:%M:%S');
  elif isinstance(obj, datetime.date):
   return obj.strftime("%Y-%m-%d")
  else:
   return json.JSONEncoder.default(self, obj)

2)写自己的默认处理函数

def myDumps(obj):
 if isinstance(obj, datetime.datetime):
  return (datetime.timedelta(hours=8)+obj).strftime('%Y-%m-%d %H:%M:%S');
 else:
  return json.dumps(obj);

对其进行测试

t = datetime.datetime.utcnow();
 a=[1,2,43,56]; 
 print json.dumps(t,default=myDumps);
 print json.dumps(a,default=myDumps);
 a.extend([t,t+datetime.timedelta(hours=8)]);
 print json.dumps(t,default=myDumps);
 print json.dumps(a,cls=MyJSONEncoder);

测试结果

"2016-06-26 09:53:03"
[1, 2, 43, 56]
"2016-06-26 09:53:03"
[1, 2, 43, 56, "2016-06-26 09:53:03", "2016-06-26 17:53:03"]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
详解Django通用视图中的函数包装
Jul 21 Python
MySQL适配器PyMySQL详解
Sep 20 Python
Django安装配置mysql的方法步骤
Oct 15 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
Django重设Admin密码过程解析
Feb 10 #Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 #Python
Python单元测试模块doctest的具体使用
Feb 10 #Python
简单了解django文件下载方式
Feb 10 #Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 #Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 #Python
解决tensorflow添加ptb库的问题
Feb 10 #Python
You might like
PHP HTML代码串 截取实现代码
2009/06/29 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php权重计算方法代码分享
2014/01/09 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
树结构之JavaScript
2017/01/24 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
Python内建模块struct实例详解
2018/02/02 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
python爬虫要用到的库总结
2020/07/28 Python
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
土木工程专业推荐信
2014/02/19 职场文书
美术指导求职信
2014/03/17 职场文书
环保宣传标语
2014/06/12 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
立志成才演讲稿
2014/09/04 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技