<1> all(): 查詢全部結果 <2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對象 <3> get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,若是符合篩選條件的對象超過一個或者沒有都會拋出錯誤。 <4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象 <5> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後獲得的並非一系列model的實例化對象,而是一個可迭代的字典序列 <6> values_list(*field): 它與values()很是類似,它返回的是一個元組序列,values返回的是一個字典序列 <7> order_by(*field): 對查詢結果排序 <8> reverse(): 對查詢結果反向排序,請注意reverse()一般只能在具備已定義順序的QuerySet上調用(在model類的Meta中指定ordering或調用order_by()方法)。 <9> distinct(): 從返回結果中剔除重複紀錄(若是你查詢跨越多個表,可能在計算QuerySet時獲得重複的結果。此時可使用distinct(),注意只有在PostgreSQL中支持按字段去重。) <10> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。 <11> first(): 返回第一條記錄 <12> last(): 返回最後一條記錄 <13> exists(): 若是QuerySet包含數據,就返回True,不然返回False
all()
filter()
exclude()
order_by()
reverse()
distinct()
values() 返回一個可迭代的字典序列
values_list() 返回一個可迭代的元祖序列
get()
first()
last()
exists()
count()
大於數據庫
例: django
models.Person.objects.filter(id__gt=4) # 獲取id大於4的值
對應的SQL語句:spa
SELECT ... WHERE id > 4;
大於或等於code
小於對象
小於或等於blog
例: 得到id大於2且小於5的值排序
models.Person.objects.filter(id__gt=2, id__lt=5)
給定的是可迭代的, 一般是列表, 元組或者queryset.rem
例:文檔
models.Person.objects.filter(id__in=[1, 3]) # 獲取id等於1, 3的數據
對應的SQL語句:get
SELECT ... WHERE id IN (1, 3);
區分大小寫
例:
models.Person.objects.filter(name__contains='a') # 獲取name字段中包含"a"的數據
對應的SQL語句:
SELECT ... WHERE name LIKE '%a%';
不區分大小寫
例:
models.Person.objects.filter(name__contains='a') # 獲取name字段中包含"a"或者"A"的數據
對應的SQL語句:
SELECT ... WHERE name ILIKE '%a%';
包括兩邊的邊界值
例:
models.Person.objects.filter(id__range=[1, 3]) # id範圍是1到3
對應的SQL語句:
SELECT ... WHERE id BETWEEN 1 and 3;
以...開頭, 區分大小寫
例:
models.Person.objects.filter(name__startswith='a')
對應的SQL語句:
SELECT ... WHERE name LIKE 'a%';
以...開頭, 不區分大小寫
以...結尾, 區分大小寫
以...結尾, 不區分大小寫
例:
models.Person.objects.filter(birth__year=2019)
對應的SQL語句:
SELECT ... WHERE birth BETWEEN '2019-01-01' AND '2019-12-31';
語法:
對象.關聯字段.字段
例:
book_obj = models.Book.objects.first() # 第一本書對象 print(book_obj.press) # 獲得這本書關聯的出版社對象 print(book_obj.press.name) # 獲得出版社對象的名稱
語法:
關聯字段__字段
例:
print(models.Book.objects.values('press__name'))
obj = models.Book.objects.filter(press__name='xx出版社') print(obj)
語法:
默認:
obj.表名_set
表名_set能夠本身命名
例:
press_obj = models.Press.objects.first() # 找到第一個出版社對象 books = press_obj.books.all() # 找到第一個出版社出版的全部書 titles = books.values_list('title') # 找到第一個出版社出版的全部書的書名 print(books) print(titles)
語法:
表名__字段
例:
titles = models.Press.objects.values_list('books__title') # books__title中的books是本身在models.py中, related_name='books' # 具體的代碼: class Book(models.Model): title = models.CharField(max_length=32) press = models.ForeignKey(to='Press', on_delete=models.CASCADE, related_name='books')
"關聯管理器"是在一對多或者多對多的關聯上下文中使用的管理器。
它存在於下面兩種狀況:
簡單來講就是當 點 後面的對象 可能存在多個的時候就可使用如下的方法。
建立一個新的對象,保存對象,並將它添加到關聯對象集之中,返回新建立的對象。
obj = models.Author.objects.first() obj.books.create(title='一塊兒來學MATLAB', press_id=2)
把指定的model對象添加到關聯對象集中。
obj = models.Author.objects.first()
obj.books.add(*models.Book.objects.all())
obj = models.Author.objects.first()
obj.books.add(*[3, 4])
更新model對象的關聯對象
obj = models.Author.objects.first()
obj.books.set([1, 2])
從關聯對象集中移除執行的model對象
obj = models.Author.objects.first()
obj.books.remove(1)
從關聯對象集中移除一切對象
obj = models.Author.objects.first()
obj.books.clear()
注意:
對於ForeignKey對象,clear() 和 remove() 方法僅在 null=True 時存在。
詳情見 Django官方文檔