1. contains: 进行大小写敏感的判断,某个字符串是否包含在指定的字段中,这个判断条件使用大小写敏感进行判断,所以在被翻译成“SQL”语句的时候,会使用“like binary”, 而“like binary”就是使用大小写敏感进行判断。
2. icontains: 进行大小写不敏感的判断,某个字符串是否包含在指定的字段中,这个判断条件使用大小写不敏感进行判断,所以在被翻译成“SQL”语句的时候,会使用“like”, 而“like”就是使用大小写不敏感进行判断。其中icontains前面的i指的就是ignore(忽略)。
具体实例,示例代码以下:
models.py文件中模型的定义,示例代码以下:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# 重写类的__str__(self)方法
def __str__(self):
return "<(Article: id: %s,title: %s, content: %s)>" % (self.id, self.title, self.content)
# 从新定义表的一些属性,注意:此处的类的名字必定要为Meta
class Meta:
db_table = 'article'
1. contains: views.py文件中视图函数的示例代码以下:
from django.http import HttpResponse
from .models import Article
def index(request):
# 注意:此处是使用filter(),只有使用filter()以后才可以在article(QuerySet)上调用query属性,查看django底层转化的sql语句。
article = Article.objects.filter(title__contains='hello')
print(article)
print(article.query)
return HttpResponse('success !')
在mysql数据库中article表的数据信息以下:

由于contains进行的是大小写敏感的查找,因此不能找到匹配的数据,则会返回QuerySet为空。而且咱们能够看到执行咱们的查找条件的时候,django底层翻译成的sql语句中的:WHERE
article.
titleLIKE BINARY %hello%
,这里的LIKE BINARY 就能够保证进行的查找为大小写敏感的查找,而且hello字符串的两边会有%(表明hello字符串前面能够含有别的字符,后面也能够含有别的字符),这就能够验证咱们上面的解释。

2.icontains: views.py文件中视图函数示例代码以下:
from django.http import HttpResponse
from .models import Article
def index(request):
# icontains进行查找title中包含“hello”的字符串
article = Article.objects.filter(title__icontains='hello')
print(article)
print(article.query)
return HttpResponse("success")
由于使用icontains采用的是大小写不敏感的的查找方式,因此会返回两条知足条件的QuerySet,而且重如下打印的结果中能够看出,咱们的查询条件被翻译成了:WHERE
article.
titleLIKE %hello%
,这里的LIKE进行的查找就是大小写不敏感的查找。

总结:iexact和exact进行的是准确性的查找,只有彻底匹配咱们的值“hello”的时候,才可以被找到。而icontains和contains中的查询条件,在进行查找的时候,会被翻译成sql语句中包含“%hello%”,在这里%意味着,前面能够含有n个字符,后面也能够含有n个字符。只要数据中包含hello字符串,就知足条件。