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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python线程的两种编程方式
Apr 14 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
python使用PyGame模块播放声音的方法
May 20 Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
python多进程实现进程间通信实例
Nov 24 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
深入了解Python在HDA中的应用
Sep 05 Python
python中删除某个元素的方法解析
Nov 05 Python
关于Tensorflow 模型持久化详解
Feb 12 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
发现的以前不知道的函数
2006/09/19 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
python读取浮点数和读取文本文件示例
2014/05/06 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Python常用类型转换实现代码实例
2020/07/28 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
霸王洗发水广告词
2014/03/14 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
同意迁入证明模板
2014/10/26 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
2016高考感言
2015/08/01 职场文书
2016教师节问候语
2015/11/10 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书