這是我在學習Django時看到的關于動態filter查詢數據Django實現方法。當時很受用,解決了我在工作中遇到的一個問題。可能有朋友會需要,轉來玩蛇網python學習平臺和大家一同分享下。
在平時用Djangoa工作時,需要處理像是對多個字段進行查詢找結果這樣的任務太常見了。如果是既定的固定字段還行,要是遇到需要處理動態字段的時候,真是一個頭兩個大的感腳。需要有個好的思路,別人給一點點指定就豁然開朗的感覺很好。
動態filter查詢數據Django實現方法代碼如下:
比如有個類,像下邊這樣:
class Entry( models.Model ):
user = models.CharField(max_length=64)
category = models.CharField(max_length=64 )
title = models.CharField( max_length = 64 )
entry_text = models.TextField()
deleted_datetime = models.DateTimeField()
我們進行一個動態的查詢,這里就需要用到 kwargs.
kwargs = {
# 動態查詢的字段
}
# 選擇deleted_datetime為空的記錄
if exclude_deleted:
kwargs[ 'deleted_datetime__isnull' ] = True
# 選擇特的category
if category is not None:
kwargs[ 'category' ] = category
# 特定的用戶
if current_user_only:
kwargs[ 'user' ] = current_user
# 根據標題查詢
if title_search_query != '':
kwargs[ 'title__icontains' ] = title_search_query
# 應用所有的查詢
entries = Entry.objects.filter( **kwargs )
# 打印出所有的結果檢查
print entries
#---------------www.iplaypy.com-----------------------------------
在這里要注意,如果用這種方式,在Q object方式下,是有問題的,要采用如下方式來處理。
kwargs = { 'deleted_datetime__isnull': True }
args = ( Q( title__icontains = 'Foo' ) | Q( title__icontains = 'Bar' ) )
entries = Entry.objects.filter( *args, **kwargs )
玩蛇網文章,轉載請注明出處和文章網址:https://www.iplaypy.com/code/other/o2133.html
相關文章 Recommend