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上传package到Pypi(代码简单)
Feb 06 Python
Python自定义线程类简单示例
Mar 23 Python
Python匿名函数及应用示例
Apr 09 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
set在python里的含义和用法
Jun 24 Python
详解Python是如何实现issubclass的
Jul 24 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python一些性能分析的技巧
Aug 30 Python
用python爬虫批量下载pdf的实现
Dec 01 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提取中文首字母
2008/04/09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
php object转数组示例
2014/01/15 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
Python正则表达式知识汇总
2017/09/22 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
Ajax和javascript的区别
2013/07/20 面试题
《再别康桥》教学反思
2014/02/12 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
门面房租房协议书
2014/08/20 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
八一建军节主持词
2015/07/01 职场文书
入党转正申请书范文
2019/05/20 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript