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 with的用法
Aug 22 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Python堆排序原理与实现方法详解
May 11 Python
学生信息管理系统python版
Oct 17 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
python 生成器和迭代器的原理解析
Oct 12 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
python 获取字典特定值对应的键的实现
Sep 29 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中把对象转换为关联数组代码分享
2015/04/09 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
php语法检查的方法总结
2019/01/21 PHP
javascript生成随机数的方法
2014/05/16 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
python语言使用技巧分享
2016/05/31 Python
Python实现的购物车功能示例
2018/02/11 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Numpy之random函数使用学习
2019/01/29 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
ORACLE十问
2015/04/20 面试题
商务会议邀请函
2014/01/09 职场文书
公司端午节活动方案
2014/02/04 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
黄金酒广告词
2014/03/21 职场文书
中学生寄语大全
2014/04/03 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
旷课检讨书500字
2014/10/14 职场文书
群众路线个人整改措施
2014/10/24 职场文书
六年级作文之关于梦
2019/10/22 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
关于python爬虫应用urllib库作用分析
2021/09/04 Python