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的Django框架中设置日期和字段可选的方法
Jul 17 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python的socket编程入门
Jan 29 Python
浅谈Python中的bs4基础
Oct 21 Python
Django实现学员管理系统
Feb 26 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
Python爬虫使用bs4方法实现数据解析
Aug 25 Python
python 实现超级玛丽游戏
Nov 25 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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 生成短网址原理及代码
2014/01/23 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python和c语言的主要区别总结
2019/07/07 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
英国大码女性时装零售商:Evans
2018/08/29 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
职业规划书如何设计?
2014/01/09 职场文书
顶岗实习计划书
2014/01/10 职场文书
保险公司年会主持词
2014/03/22 职场文书
春风行动实施方案
2014/03/28 职场文书
公民授权委托书
2014/10/15 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
个人工作表现自我评价
2015/03/06 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书