根据

documentation:

filter(**kwargs) Returns a new QuerySet containing objects that match

the given lookup parameters.

The lookup parameters (**kwargs) should be in the format described in

Field lookups below. Multiple parameters are joined via AND in the

underlying SQL statement.

对我来说,这表明它将返回原始集合中的项目子集.

但是我似乎错过了一些东西,因为下面的示例并不像我期望的那样:

>>> kids = Kid.objects.all()

>>> tuple(k.name for k in kids)

(u'Bob',)

>>> toys = Toy.objects.all()

>>> tuple( (t.name, t.owner.name) for t in toys)

((u'car', u'Bob'), (u'bear', u'Bob'))

>>> subsel = Kid.objects.filter( owns__in = toys )

>>> tuple( k.name for k in subsel )

(u'Bob', u'Bob')

>>> str(subsel.query)

'SELECT "bug_kid"."id", "bug_kid"."name" FROM "bug_kid" INNER JOIN "bug_toy" ON ("bug_kid"."id" = "bug_toy"."owner_id") WHERE "bug_toy"."id" IN (SELECT U0."id" FROM "bug_toy" U0)'

正如你在上面看到的那样,subsel最终会返回重复的记录,这不是我想要的.我的问题是获得子集的正确方法是什么? (注意:按定义设置不会出现多次出现的同一个对象)

解释为什么它的行为也会很好,因为我过滤意味着你在Python中使用filter()内置函数实现了什么.这是:采取满足要求的元素(换句话说,丢弃不符合要求的元素).而这个定义似乎不允许引入/复制对象.

我知道可以完全区分(),但仍然导致相当丑陋(可能比可能更慢)查询:

>>> str( subsel.distinct().query )

'SELECT DISTINCT "bug_kid"."id", "bug_kid"."name" FROM "bug_kid" INNER JOIN "bug_toy" ON ("bug_kid"."id" = "bug_toy"."owner_id") WHERE "bug_toy"."id" IN (SELECT U0."id" FROM "bug_toy" U0)'

我的models.py完整性:

from django.db import models

class Kid(models.Model):

name = models.CharField(max_length=200)

class Toy(models.Model):

name = models.CharField(max_length=200)

owner = models.ForeignKey(Kid, related_name='owns')

编辑:

在与@limelight聊天之后,结论是我的问题是我希望filter()根据字典定义来表现.并且它是如何在Python或任何其他理智的框架/语言中工作的.

更确切地说,如果我设置A = {x,y,z}并且我调用A.filter(< predicate>),我不希望任何元素被复制.使用Django的QuerySet,但它的行为如下:

A = {x,y,z}

A.filter( )

# now A i.e. = {x,x}

所以首先问题是不合适的方法名称(比如match()会更好).

第二件事是我认为创建比Django允许的更有效的查询是可能的.我可能错了,如果我有一点时间,我可能会尝试检查是否属实.

python集合操作 读取_python – Django – 如何使用QuerySet过滤来获取对象的子集?...相关推荐

  1. python集合操作 读取_对python读写文件去重、RE、set的使用详解

    # -*- coding:utf-8 -*- from datetime import datetime import re def Main(): sourcr_dir = '/data/u_lx_ ...

  2. python.集合转列表_Python列表、元组、字典、集合

    目录 3.1 Python 列表 3.2 Python 元组 3.3 Python 字典 3.4 Python 集合 3.1 Python列表 3.1.1 Python列表的概述 列表的定义:列表是一 ...

  3. python写邮箱系统_Python django实现简单的邮件系统发送邮件功能

    本文实例讲述了Python django实现简单的邮件系统发送邮件功能.分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是 ...

  4. python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】

    本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...

  5. python文件分块读取_Python多进程分块读取超大文件的方法

    本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...

  6. python集合增加元素_python集合的新增元素方法整理

    我们可以把全体人数当作一个集合,想要往其中加入新人有不同的增加方式.可以一周增加一次,也可以集中到月底一起加入集体.我们今天所要讲的在python集合中,添加元素的两种方法就可以这样理解.一个是整体加 ...

  7. python提取cad坐标到excel_使用python来操作autocad,并且将坐标点转换成cad可见对象...

    由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形 (可能每个项目需求不一样,解决方式不同) 第一步 . 需要转换的图形类型 第二步 . 那我们先查 ...

  8. 使用python来操作autocad,并且将坐标点转换成cad可见对象

    由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形 (可能每个项目需求不一样,解决方式不同) 第一步 . 需要转换的图形类型 第二步 . 那我们先查 ...

  9. python文件操作函数_python基础之文件操作,集合,函数

    文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...

最新文章

  1. SpringCloud SpringBoot 推荐
  2. python四级中考有用的_一位中考生家长的后悔药:考前30多天,千万别做这7件傻事...
  3. Oracle Hint(提示)与常用方法
  4. 机器学习算法(2)——AdaBoost算法
  5. 工作流activiti5 使用流程变量
  6. oracle 函数可变参数,6.3 带有可变参数的函数
  7. [转]Delphi的运算符重载
  8. matlab高斯窗函数,Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗
  9. 大数据影响下的专题地图编制
  10. pc station v15 博图_博图的pcstation是做什么的?和wincc有什么区别?怎么使用?-工业支持中心-西门子中国...
  11. Datawhale 数据挖掘新手入门笔记 -Task5 模型融合
  12. tf.estimator.EstimatorSpec讲解
  13. 怎么打开苹果Mac电脑科学型计算器
  14. 在家徒手健身就是这9个动作,让你一天帅24小时
  15. 2017前端技术预览(未完结,最后更新于1月13日)
  16. 解决九号老C(C30/C40/C60/C80)电动车坐垫感应失灵的问题
  17. mybatis调用oracle视图
  18. nes网页服务器怎么改ip,virtuanes联机(怎么用VirtuaNES联网)
  19. linux下intel安装教程,在 Ubuntu 15.10 上安装 Intel Graphics 安装器
  20. ​S/4中究竟有多少个模块,你对这些模块了解多少

热门文章

  1. C++编写DLL的方法
  2. 关于VMware虚拟机安装windows 7系统
  3. python 相关系数_python如何计算相关系数与协方差
  4. OpencvSharp的踩坑之路
  5. 计算机操作系统实验一,计算机操作系统实验一.doc
  6. python解复杂方程组_sympy计算方程组的复杂表达式怎么获得数值解?
  7. php怎么做免登录,php---一周内免登录
  8. np合并 python_这15个tips,带你领略 Python 的简洁和优雅
  9. Android开发之Java的IO流读写的十种方法
  10. c语言车库计费系统,基于单片机智能车库计费系统设计.doc