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;