简介:许多朋友询问了有关Django查询集过滤器的相关问题。本文的首席执行官注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!
实际上,前端构造过程通常基于前后的分离。如果您想使自己的施工过程清晰,简单和方便,请首先在项目之前和之后将您的项目分开。完成,给您一些建议。
Django模型通常使用Django的GET和过滤器方法。重要的是要找出两者之间的区别。
为了说明两者之间的差异,定义了2个模型
班级学生(Models.Model):
name = models.chafield('name',max_length = 20,默认='')
age = models.charfield('age',max_length = 20,默认='')
课程(Models.Model):
学生=型号。
1.让我们先谈谈django的获取方法:
1django的GET方法是从数据库中获得匹配结果并返回对象。如果记录不存在,它将报告错误。
例如,如果我的数据库中有记录,则记录的值为“ python”,我使用student = statent.objects.get。
它返回记录对象。您可以通过学生查看。__dict__。它返回字典表格。
而且,如果我使用GET方法检查数据库中不存在的记录,则该程序将报告错误。
例如:student = student.objects.gets.get(name ='pharaoh'),您可以自己运行。
2如果您使用django获取相关表的数据,并且如果密钥表的数据中有2个以上的数据,将会报告错误。
例如,我的学生表中有一个记录:
ID名称年龄
1 Python 24
书籍表:
id student_id
1 1
21
我用
student = student.objects.get(name ='python')
book = book.objects.get(学生)
它还报告了一个错误,因为书籍表有2个记录和学生表。
2.让我们谈谈Django过滤器:
1Django滤波器方法是匹配数据库的结果,并返回对象列表。如果记录不存在,它将返回[]。
例如,我的数据库中有一个记录。如果记录的价值为Python,我使用student = student.objects.filter(name ='python'))))))))
返回的学生是对象的列表。可以看出,学生[0]的结果和上述方法返回的雕像是相同的。
在上面的所有示例中,我们构造的过滤器仅将字段值与一定常数进行比较。如果我们想比较两个字段的值,我们该怎么办?
Django提供了F()来进行此类比较。f()实例可以参考查询中的字段,以比较同一模型实例中两个不同字段的值。
Django支持F()对象与F()对象和常数之间加法,减法,乘法和成型的操作。
关键字参数查询(例如Filter()和其他方法是“和”的方法。如果您需要执行更复杂的查询(例如或语句),则可以使用Q对象。
来自django.db.models导入Q
Q(标题__startswith ='py')
Q可以与|结合使用Q对象。操作符号。当操作员在两个Q对象上使用时,它会产生一个新的Q对象。
查询名称称为水保证金或价格大于100的书
您可以组合并|括号并使用括号进行分组来编写任何复杂的Q对象。在同一时间,可以使用Q对象?运算符被逆转,从而使组合可以正常查询和抗抗 - (非)查询:
查询函数可以与Q对象和关键字参数混合。提供给查询函数的所有参数(关键字参数或Q对象)为“和”。但是,如果出现Q对象,则必须在所有关键字参数的前面。例如:
查询名称,称为水利润,价格大于100
将list_filter中的外键字段更改为forefer_key___er_fieldname。此用法适用于外国基金会和Manytomanyfield。
首先比较两个功能文档的解释。
得到
返回与给定查找参数匹配的对象,该对象应以字段查找中描述的格式。
get()如果发现的对象还要多,则会升级多个对象。Mutt处是注射化是模型类的属性。
如果对象不是给定参数,则get()提出了doteist异常。此例外也是模型类的属性
筛选
返回一个新的QuerySet包含与给定查找参数不匹配的对象。
输入参数
GET的参数只能是模型中定义的那些字段,仅支持严格匹配
过滤器的参数可以是一个字段,也可以是查询关键字(例如,喜欢)的扩展名。
返回值
获取返回值是模型对象的定义
过滤器返回值是一个新的QuerySet对象,然后您可以查询QuerySet以返回新的QuerySet对象以支持链操作
querySet可以迭代或穿越,切成薄片等的收集对象,但不等于列表类型(必须注意使用)
异常
只有在Get有一个记录返回时,这意味着GET的查询字段必须是主要键或唯一受限字段。返回多个记录或未找到记录时,它将引发异常
过滤器有记录是否匹配
稍后将省略截断,这通常会被太长的文本省略。
切片是一个列表,实际上是数据拦截。它通常用于数据操作。当然,没有...
具体而言,省略了您的截断词,并且字符串之间的差距非常大。
结论:以上是首席CTO注释的Django查询集的过滤器的全部内容。我希望这对每个人都会有所帮助。如果您想进一步了解这一点,请记住收集并遵循这本书。