from django.db import models
class Article(models.Model):
title = models.CharField(max_length= 64)
body = models.TextField()
pub_time = models.DateTimeField(auto_now_add= True)
class Meta:
get_latest_by = 'pub_time'
-
几种反向查询策略:以上表为例
order_by() 语句:
models.Article.objects.all().order_by('-id) 或者 order_by('-pub_time')
反向切片访问:
models.Article.objects.fiter(id__gte=0)[::-1] 完全反向切片
reverse()函数
models.Article.objects.all().order_by('id').reverse()
-
latest(self, *fields, field_name=None) 函数访问
根据 model 的 'get_latest_by' 选项或可选的字段名参数返回最新的对象. 例子:
Article.objects.latest()
Article.objects.latest('expire_date')
如果模型的Meta指定get_latest_by,则可以将field_name参数留给earliest()或者 latest()。默认情况下,Django将使用get_latest_by中指定的字段。
get_latest_by
由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果你的数据模型中有 DateField 或 DateTimeField 类型的字段,你可以通过这个选项来指定lastest()是按照哪个字段进行选取的。
一个 DateField 或 DateTimeField 字段的名字. 若提供该选项, 该模块将拥有一个 get_latest() 函数以得到 "最新的" 对象(依据那个字段):
exact、iexact
exact:精确匹配。区分大小写
例如:
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)
iexact:不区分大小写的精确匹配
例如:
Blog.objects.get(name__iexact='beatles blog')
Blog.objects.get(name__iexact=None)
contains、icontains
contains:包含,大小写敏感
例如:
Entry.objects.get(headline__contains='Lennon')
icontains:包含,大小写不明感.
例如:
Entry.objects.get(headline__icontains='Lennon')
in
在一个给定的列表中.
Example:
Entry.objects.filter(id__in=[1, 3, 4])
gt、gte、lt、lte
gt:大于
例子:
Entry.objects.filter(id__gt=4)
gte:大于或等于
lt:小于
lte:小于或等于
startswith、istartswith、endswith、iendswith
startswith:区分大小写,开始位置匹配
例如:
Entry.objects.filter(headline__startswith='Will')
istartswith:不区分大小写,开始位置匹配
endswith:区分大小写,结束位置匹配
iendswith:不区分大小写,结束位置匹配
range
范围
例如:
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
等价SQL:
SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';
year、month、day
year: 返回精确的年份
例如:
Entry.objects.filter(pub_date__year=2005)
等价SQL:
SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
month: 对于月份时间字段,匹配一个整数从1 (January)到 12 (December).
day: 对于日期和日期时间字段,具体到某一天的匹配。取一个整数的天数。
isnull
值为 True 或False, 相当于SQL语句IS NULL和IS NOT NULL.
例如:
Entry.objects.filter(pub_date__isnull=True)
等价SQL:
SELECT ... WHERE pub_date IS NULL;